Skip to content

Commit

Permalink
Added recipe to apply banners to shields
Browse files Browse the repository at this point in the history
  • Loading branch information
Insane96 committed Aug 11, 2022
1 parent 4d99c17 commit 702e080
Show file tree
Hide file tree
Showing 12 changed files with 129 additions and 8 deletions.
2 changes: 2 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Changelog

## Upcoming
* Added Copper Shield
* Added recipe to apply banners to shields
* Added Combat Test shield disabling
* Fixed (hopefully) vanilla shield recipe not being overridden

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/insane96mcp/shieldsplus/ShieldsPlus.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.insane96mcp.shieldsplus.setup.Client;
import com.insane96mcp.shieldsplus.setup.Config;
import com.insane96mcp.shieldsplus.setup.SPItems;
import com.insane96mcp.shieldsplus.setup.SPRecipeSerializers;
import com.mojang.logging.LogUtils;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.ModLoadingContext;
Expand All @@ -23,5 +24,6 @@ public ShieldsPlus()
FMLJavaModLoadingContext.get().getModEventBus().addListener(Client::setup);
final IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
SPItems.ITEMS.register(modEventBus);
SPRecipeSerializers.RECIPE_SERIALIZERS.register(modEventBus);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.insane96mcp.shieldsplus.module.base.feature;

import com.insane96mcp.shieldsplus.item.SPShieldItem;
import com.insane96mcp.shieldsplus.setup.Config;
import com.insane96mcp.shieldsplus.setup.SPShieldMaterials;
import com.insane96mcp.shieldsplus.world.item.SPShieldItem;
import insane96mcp.insanelib.base.Feature;
import insane96mcp.insanelib.base.Label;
import insane96mcp.insanelib.base.Module;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.insane96mcp.shieldsplus.render;

import com.insane96mcp.shieldsplus.ShieldsPlus;
import com.insane96mcp.shieldsplus.item.SPShieldItem;
import com.insane96mcp.shieldsplus.world.item.SPShieldItem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.datafixers.util.Pair;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.insane96mcp.shieldsplus.setup;

import com.insane96mcp.shieldsplus.ShieldsPlus;
import com.insane96mcp.shieldsplus.item.SPShieldItem;
import com.insane96mcp.shieldsplus.world.item.SPShieldItem;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.client.renderer.item.ItemPropertyFunction;
import net.minecraftforge.api.distmarker.Dist;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/insane96mcp/shieldsplus/setup/SPItems.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.insane96mcp.shieldsplus.setup;

import com.insane96mcp.shieldsplus.ShieldsPlus;
import com.insane96mcp.shieldsplus.item.SPShieldItem;
import com.insane96mcp.shieldsplus.item.SPShieldMaterial;
import com.insane96mcp.shieldsplus.world.item.SPShieldItem;
import com.insane96mcp.shieldsplus.world.item.SPShieldMaterial;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraftforge.registries.DeferredRegister;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.insane96mcp.shieldsplus.setup;

import com.insane96mcp.shieldsplus.ShieldsPlus;
import com.insane96mcp.shieldsplus.world.item.crafting.SPShieldDecorationRecipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.SimpleRecipeSerializer;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class SPRecipeSerializers {
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ShieldsPlus.MOD_ID);

public static final RegistryObject<SimpleRecipeSerializer<SPShieldDecorationRecipe>> SHIELD_DECORATION_RECIPE = RECIPE_SERIALIZERS.register("shield_decoration_recipe", () -> new SimpleRecipeSerializer<>(SPShieldDecorationRecipe::new));
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.insane96mcp.shieldsplus.setup;

import com.insane96mcp.shieldsplus.item.SPShieldMaterial;
import com.insane96mcp.shieldsplus.world.item.SPShieldMaterial;
import net.minecraft.world.item.Rarity;

public class SPShieldMaterials {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.insane96mcp.shieldsplus.item;
package com.insane96mcp.shieldsplus.world.item;

import com.insane96mcp.shieldsplus.ShieldsPlus;
import com.insane96mcp.shieldsplus.render.ShieldBlockEntityWithoutLevelRenderer;
Expand All @@ -17,6 +17,7 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.IItemRenderProperties;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.text.DecimalFormat;
Expand All @@ -38,6 +39,10 @@ public SPShieldItem(SPShieldMaterial material, Properties p_43089_) {
this.material = material;
}

public @NotNull String getDescriptionId(@NotNull ItemStack itemStack) {
return super.getDescriptionId();
}

public double getBlockedDamage() {
return this.material.damageBlocked;
}
Expand All @@ -63,6 +68,11 @@ public static void addDamageBlockedText(List<Component> components, double block
components.add(new TranslatableComponent(Strings.Translatable.DAMAGE_BLOCKED, new DecimalFormat("#.#").format(blockedDamage)).withStyle(ChatFormatting.BLUE));
}

@Override
public boolean isValidRepairItem(ItemStack repaired, ItemStack repairingMaterial) {
return super.isValidRepairItem(repaired, repairingMaterial);
}

@OnlyIn(Dist.CLIENT)
public void initClientMaterial() {
this.clientMaterial = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield".formatted(this.material.materialName)));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.insane96mcp.shieldsplus.item;
package com.insane96mcp.shieldsplus.world.item;

import net.minecraft.world.item.Rarity;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package com.insane96mcp.shieldsplus.world.item.crafting;

import com.insane96mcp.shieldsplus.setup.SPRecipeSerializers;
import com.insane96mcp.shieldsplus.world.item.SPShieldItem;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.CraftingContainer;
import net.minecraft.world.item.BannerItem;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.CustomRecipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntityType;
import org.jetbrains.annotations.NotNull;

public class SPShieldDecorationRecipe extends CustomRecipe {
public SPShieldDecorationRecipe(ResourceLocation id) {
super(id);
}

public boolean matches(CraftingContainer craftingContainer, @NotNull Level level) {
ItemStack shieldStack = ItemStack.EMPTY;
ItemStack bannerStack = ItemStack.EMPTY;

for(int i = 0; i < craftingContainer.getContainerSize(); ++i) {
ItemStack itemStack = craftingContainer.getItem(i);
if (!itemStack.isEmpty()) {
if (itemStack.getItem() instanceof BannerItem) {
if (!bannerStack.isEmpty()) {
return false;
}

bannerStack = itemStack;
}
else {
if (!(itemStack.getItem() instanceof SPShieldItem)) {
return false;
}

if (!shieldStack.isEmpty()) {
return false;
}

if (BlockItem.getBlockEntityData(itemStack) != null) {
return false;
}

shieldStack = itemStack;
}
}
}

return !shieldStack.isEmpty() && !bannerStack.isEmpty();
}

public @NotNull ItemStack assemble(CraftingContainer craftingContainer) {
ItemStack bannerStack = ItemStack.EMPTY;
ItemStack shieldStack = ItemStack.EMPTY;

for(int i = 0; i < craftingContainer.getContainerSize(); ++i) {
ItemStack itemStack = craftingContainer.getItem(i);
if (!itemStack.isEmpty()) {
if (itemStack.getItem() instanceof BannerItem) {
bannerStack = itemStack;
}
else if (itemStack.getItem() instanceof SPShieldItem) {
shieldStack = itemStack.copy();
}
}
}

if (!shieldStack.isEmpty()) {
CompoundTag bannerTag = BlockItem.getBlockEntityData(bannerStack);
CompoundTag shieldTag = bannerTag == null ? new CompoundTag() : bannerTag.copy();
shieldTag.putInt("Base", ((BannerItem) bannerStack.getItem()).getColor().getId());
BlockItem.setBlockEntityData(shieldStack, BlockEntityType.BANNER, shieldTag);
}
return shieldStack;
}

public boolean canCraftInDimensions(int width, int height) {
return width * height >= 2;
}

public @NotNull RecipeSerializer<?> getSerializer() {
return SPRecipeSerializers.SHIELD_DECORATION_RECIPE.get();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "shieldsplus:shield_decoration_recipe"
}

0 comments on commit 702e080

Please sign in to comment.