diff --git a/src/main/java/cy/jdkdigital/productivebees/ProductiveBees.java b/src/main/java/cy/jdkdigital/productivebees/ProductiveBees.java index 609d593d6..6d1c658fe 100644 --- a/src/main/java/cy/jdkdigital/productivebees/ProductiveBees.java +++ b/src/main/java/cy/jdkdigital/productivebees/ProductiveBees.java @@ -127,7 +127,8 @@ public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { BlockPos spawnPos = source.getBlockPos().offset(direction); entity.setPositionAndRotation(spawnPos.getX() + 0.5, spawnPos.getY(), spawnPos.getZ() + 0.5, 0, 0); - if (source.getWorld().addEntity(entity)) { + + if (source.getWorld().addEntity(entity) && stack.getItem().equals(ModItems.BEE_CAGE.get())) { stack.shrink(1); } return stack; @@ -137,6 +138,7 @@ public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { } }; DispenserBlock.registerDispenseBehavior(ModItems.BEE_CAGE.get(), cageDispensebehavior); + DispenserBlock.registerDispenseBehavior(ModItems.STURDY_BEE_CAGE.get(), cageDispensebehavior); this.fixPOI(event); } diff --git a/src/main/java/cy/jdkdigital/productivebees/client/render/ingredient/BeeRenderer.java b/src/main/java/cy/jdkdigital/productivebees/client/render/ingredient/BeeRenderer.java new file mode 100644 index 000000000..51422e3b6 --- /dev/null +++ b/src/main/java/cy/jdkdigital/productivebees/client/render/ingredient/BeeRenderer.java @@ -0,0 +1,141 @@ +package cy.jdkdigital.productivebees.client.render.ingredient; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import cy.jdkdigital.productivebees.ProductiveBeesConfig; +import cy.jdkdigital.productivebees.common.entity.bee.ConfigurableBeeEntity; +import cy.jdkdigital.productivebees.common.entity.bee.ProductiveBeeEntity; +import cy.jdkdigital.productivebees.integrations.jei.ingredients.BeeIngredient; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.Vector3f; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.BeeEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import java.util.HashMap; +import java.util.Map; + +public class BeeRenderer +{ + public static void render(int xPosition, int yPosition, BeeIngredient beeIngredient, Minecraft minecraft) { + if (ProductiveBeesConfig.CLIENT.renderBeeIngredientAsEntity.get()) { + BeeEntity bee = beeIngredient.getCachedEntity(minecraft.world); + + if (minecraft.player != null && bee != null) { + if (bee instanceof ConfigurableBeeEntity) { + ((ConfigurableBeeEntity) bee).setBeeType(beeIngredient.getBeeType().toString()); + } + + if (bee instanceof ProductiveBeeEntity) { + ((ProductiveBeeEntity) bee).setRenderStatic(); + } + + bee.ticksExisted = minecraft.player.ticksExisted; + bee.renderYawOffset = -20; + + float scaledSize = 18; + + MatrixStack matrixStack = new MatrixStack(); + matrixStack.push(); + matrixStack.translate(7 + xPosition, 12 + yPosition, 1.5); + matrixStack.rotate(Vector3f.ZP.rotationDegrees(190.0F)); + matrixStack.rotate(Vector3f.YP.rotationDegrees(20.0F)); + matrixStack.rotate(Vector3f.XP.rotationDegrees(20.0F)); + matrixStack.translate(0.0F, -0.2F, 1); + matrixStack.scale(scaledSize, scaledSize, scaledSize); + + EntityRendererManager entityrenderermanager = minecraft.getRenderManager(); + IRenderTypeBuffer.Impl buffer = minecraft.getRenderTypeBuffers().getBufferSource(); + entityrenderermanager.renderEntityStatic(bee, 0, 0, 0.0D, minecraft.getRenderPartialTicks(), 1, matrixStack, buffer, 15728880); + buffer.finish(); + matrixStack.pop(); + } + } else { + renderBeeFace(xPosition, yPosition, beeIngredient, minecraft.world); + } + } + + private static final Map> renderSettings = new HashMap>() + {{ + put(0, new HashMap() + {{ + put("scale", 128); + put("iconX", 14); + put("iconY", 14); + put("iconU", 20); + put("iconV", 20); + }}); + put(1, new HashMap() + {{ + put("scale", 128); + put("iconX", 12); + put("iconY", 12); + put("iconU", 20); + put("iconV", 20); + }}); + }}; + private static void renderBeeFace(int xPosition, int yPosition, BeeIngredient beeIngredient, World world) { + RenderSystem.enableBlend(); + RenderSystem.enableAlphaTest(); + ResourceLocation resLocation = getBeeTexture(beeIngredient, world); + Minecraft.getInstance().getTextureManager().bindTexture(resLocation); + + Map iconSettings = renderSettings.get(beeIngredient.getRenderType()); + float[] color = colorCache.get(beeIngredient.getBeeType().toString()); + + float scale = (float) 1 / iconSettings.get("scale"); + int iconX = iconSettings.get("iconX"); + int iconY = iconSettings.get("iconY"); + int iconU = iconSettings.get("iconU"); + int iconV = iconSettings.get("iconV"); + + if (color == null) { + color = new float[] {1.0f, 1.0f, 1.0f}; + } + RenderSystem.color4f(color[0], color[1], color[2], 1.0f); + BufferBuilder renderBuffer = Tessellator.getInstance().getBuffer(); + + renderBuffer.begin(7, DefaultVertexFormats.POSITION_TEX); + renderBuffer.pos(xPosition, yPosition + iconY, 0D).tex((iconU) * scale, (iconV + iconY) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); + renderBuffer.pos(xPosition + iconX, yPosition + iconY, 0D).tex((iconU + iconX) * scale, (iconV + iconY) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); + renderBuffer.pos(xPosition + iconX, yPosition, 0D).tex((iconU + iconX) * scale, (iconV) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); + renderBuffer.pos(xPosition, yPosition, 0D).tex((iconU) * scale, (iconV) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); + + Tessellator.getInstance().draw(); + + RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); + RenderSystem.disableAlphaTest(); + RenderSystem.disableBlend(); + } + + private static HashMap beeTextureLocations = new HashMap<>(); + private static HashMap colorCache = new HashMap<>(); + public static ResourceLocation getBeeTexture(@Nonnull BeeIngredient ingredient, World world) { + String beeId = ingredient.getBeeType().toString(); + if (beeTextureLocations.get(beeId) != null) { + return beeTextureLocations.get(beeId); + } + + Entity bee = ingredient.getBeeEntity().create(world); + if (bee instanceof ConfigurableBeeEntity) { + ((ConfigurableBeeEntity) bee).setBeeType(ingredient.getBeeType().toString()); + colorCache.put(beeId, ((ConfigurableBeeEntity) bee).getColor(0).getComponents(null)); + } + + EntityRendererManager manager = Minecraft.getInstance().getRenderManager(); + EntityRenderer renderer = manager.getRenderer(bee); + + ResourceLocation resource = renderer.getEntityTexture(bee); + beeTextureLocations.put(beeId, resource); + + return beeTextureLocations.get(beeId); + } +} diff --git a/src/main/java/cy/jdkdigital/productivebees/common/item/BeeCage.java b/src/main/java/cy/jdkdigital/productivebees/common/item/BeeCage.java index eca8229a1..962d59596 100644 --- a/src/main/java/cy/jdkdigital/productivebees/common/item/BeeCage.java +++ b/src/main/java/cy/jdkdigital/productivebees/common/item/BeeCage.java @@ -2,7 +2,6 @@ import cy.jdkdigital.productivebees.common.entity.bee.ProductiveBeeEntity; import cy.jdkdigital.productivebees.init.ModAdvancements; -import cy.jdkdigital.productivebees.init.ModItems; import cy.jdkdigital.productivebees.util.BeeAttributes; import cy.jdkdigital.productivebees.util.BeeHelper; import net.minecraft.client.gui.screen.Screen; @@ -70,13 +69,17 @@ public ActionResultType onItemUse(ItemUseContext context) { entity.setPositionAndRotation(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5, 0, 0); worldIn.addEntity(entity); - // Delete stack - context.getPlayer().inventory.deleteStack(stack); + postItemUse(context); } return ActionResultType.SUCCESS; } + protected void postItemUse(ItemUseContext context) { + // Delete stack + context.getPlayer().inventory.deleteStack(context.getItem()); + } + @Override public boolean itemInteractionForEntity(ItemStack itemStack, PlayerEntity player, LivingEntity targetIn, Hand hand) { if (targetIn.getEntityWorld().isRemote() || (!(targetIn instanceof BeeEntity) || !targetIn.isAlive()) || (isFilled(itemStack))) { @@ -85,9 +88,12 @@ public boolean itemInteractionForEntity(ItemStack itemStack, PlayerEntity player BeeEntity target = (BeeEntity) targetIn; - ItemStack cageStack = captureEntity(target); + ItemStack cageStack = captureEntity(target, itemStack.getItem()); - if (!player.inventory.addItemStackToInventory(cageStack)) { + if (itemStack.getCount() == 1) { + int slot = player.inventory.getSlotFor(itemStack); + player.inventory.add(slot, cageStack); + } else if (!player.inventory.addItemStackToInventory(cageStack)) { player.dropItem(cageStack, false); } @@ -103,13 +109,12 @@ public boolean itemInteractionForEntity(ItemStack itemStack, PlayerEntity player return true; } - public static ItemStack captureEntity(BeeEntity target) { + public static ItemStack captureEntity(BeeEntity target, Item cageItem) { CompoundNBT nbt = new CompoundNBT(); nbt.putString("entity", EntityType.getKey(target.getType()).toString()); if (target.hasCustomName()) { nbt.putString("name", target.getCustomName().getFormattedText()); - } - else { + } else { nbt.putString("name", target.getName().getFormattedText()); } target.writeWithoutTypeId(nbt); @@ -124,7 +129,7 @@ public static ItemStack captureEntity(BeeEntity target) { } nbt.putString("mod", modName); - ItemStack cageStack = new ItemStack(ModItems.BEE_CAGE.get()); + ItemStack cageStack = new ItemStack(cageItem); cageStack.setTag(nbt); return cageStack; diff --git a/src/main/java/cy/jdkdigital/productivebees/common/item/SturdyBeeCage.java b/src/main/java/cy/jdkdigital/productivebees/common/item/SturdyBeeCage.java new file mode 100644 index 000000000..d0f675042 --- /dev/null +++ b/src/main/java/cy/jdkdigital/productivebees/common/item/SturdyBeeCage.java @@ -0,0 +1,15 @@ +package cy.jdkdigital.productivebees.common.item; + +import net.minecraft.item.ItemUseContext; + +public class SturdyBeeCage extends BeeCage +{ + public SturdyBeeCage(Properties properties) { + super(properties); + } + + @Override + protected void postItemUse(ItemUseContext context) { + context.getItem().setTag(null); + } +} diff --git a/src/main/java/cy/jdkdigital/productivebees/common/tileentity/CatcherTileEntity.java b/src/main/java/cy/jdkdigital/productivebees/common/tileentity/CatcherTileEntity.java index 0eaf7aabe..7ac583d3c 100644 --- a/src/main/java/cy/jdkdigital/productivebees/common/tileentity/CatcherTileEntity.java +++ b/src/main/java/cy/jdkdigital/productivebees/common/tileentity/CatcherTileEntity.java @@ -58,7 +58,7 @@ public void tick() { if (babeeUpgrades > 0 && !bee.isChild()) { continue; } - ItemStack cageStack = BeeCage.captureEntity(bee); + ItemStack cageStack = BeeCage.captureEntity(bee, invItem.getItem()); if (((InventoryHandlerHelper.ItemHandler) invHandler).addOutput(cageStack)) { bee.remove(true); invItem.shrink(1); diff --git a/src/main/java/cy/jdkdigital/productivebees/container/gui/AdvancedBeehiveScreen.java b/src/main/java/cy/jdkdigital/productivebees/container/gui/AdvancedBeehiveScreen.java index 56fc83b6c..b5afd8ffd 100644 --- a/src/main/java/cy/jdkdigital/productivebees/container/gui/AdvancedBeehiveScreen.java +++ b/src/main/java/cy/jdkdigital/productivebees/container/gui/AdvancedBeehiveScreen.java @@ -2,6 +2,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import cy.jdkdigital.productivebees.ProductiveBees; +import cy.jdkdigital.productivebees.client.render.ingredient.BeeRenderer; import cy.jdkdigital.productivebees.common.block.AdvancedBeehive; import cy.jdkdigital.productivebees.common.tileentity.AdvancedBeehiveTileEntityAbstract; import cy.jdkdigital.productivebees.common.tileentity.DragonEggHiveTileEntity; @@ -109,7 +110,7 @@ protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, i BeeIngredient beeIngredient = BeeIngredientFactory.getIngredient(type).get(); if (beeIngredient != null) { - BeeIngredient.render(getGuiLeft() + positions.get(i).get(0) - (expanded ? 13 : 0), getGuiTop() + positions.get(i).get(1), beeIngredient, minecraft); + BeeRenderer.render(getGuiLeft() + positions.get(i).get(0) - (expanded ? 13 : 0), getGuiTop() + positions.get(i).get(1), beeIngredient, minecraft); } } i++; diff --git a/src/main/java/cy/jdkdigital/productivebees/event/EventHandler.java b/src/main/java/cy/jdkdigital/productivebees/event/EventHandler.java index 58a3a55df..13175a895 100644 --- a/src/main/java/cy/jdkdigital/productivebees/event/EventHandler.java +++ b/src/main/java/cy/jdkdigital/productivebees/event/EventHandler.java @@ -3,6 +3,7 @@ import cy.jdkdigital.productivebees.ProductiveBees; import cy.jdkdigital.productivebees.common.entity.bee.ConfigurableBeeEntity; import cy.jdkdigital.productivebees.init.ModEntities; +import cy.jdkdigital.productivebees.init.ModItems; import cy.jdkdigital.productivebees.network.PacketHandler; import cy.jdkdigital.productivebees.network.packets.Messages; import cy.jdkdigital.productivebees.setup.BeeReloadListener; @@ -24,6 +25,8 @@ import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.storage.loot.ItemLootEntry; +import net.minecraftforge.event.LootTableLoadEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import net.minecraftforge.event.entity.player.PlayerEvent; @@ -116,12 +119,19 @@ public static void onEntityJoinWorld(EntityJoinWorldEvent event) { Map data = BeeReloadListener.INSTANCE.getData(); List beeTypes = new ArrayList<>(data.keySet()); - - if (!beeTypes.isEmpty()) { ((ConfigurableBeeEntity) entity).setBeeType(beeTypes.get(ProductiveBees.rand.nextInt(beeTypes.size()))); } } } } + + @SubscribeEvent + public static void onLootSetup(LootTableLoadEvent event) { + if (event.getName().toString().contains("chests/village")) { + event.getTable().getPool("main").lootEntries.add( + ItemLootEntry.builder(ModItems.STURDY_BEE_CAGE.get()).weight(10).build() + ); + } + } } diff --git a/src/main/java/cy/jdkdigital/productivebees/init/ModItems.java b/src/main/java/cy/jdkdigital/productivebees/init/ModItems.java index 8a2633920..0a8cbeb71 100644 --- a/src/main/java/cy/jdkdigital/productivebees/init/ModItems.java +++ b/src/main/java/cy/jdkdigital/productivebees/init/ModItems.java @@ -37,6 +37,7 @@ public class ModItems public static final RegistryObject HONEY_BUCKET = createItem("honey_bucket", () -> new BucketItem(ModFluids.HONEY, new Item.Properties().maxStackSize(1).group(ModItemGroups.PRODUCTIVE_BEES))); public static final RegistryObject BEE_CAGE = createItem("bee_cage", () -> new BeeCage(new Item.Properties().group(ModItemGroups.PRODUCTIVE_BEES))); + public static final RegistryObject STURDY_BEE_CAGE = createItem("sturdy_bee_cage", () -> new SturdyBeeCage(new Item.Properties().maxStackSize(1).group(ModItemGroups.PRODUCTIVE_BEES))); public static final RegistryObject HONEY_TREAT = createItem("honey_treat", () -> new HoneyTreat(new Item.Properties().group(ModItemGroups.PRODUCTIVE_BEES))); public static final RegistryObject GENE_BOTTLE = createItem("gene_bottle", () -> new GeneBottle(new Item.Properties().group(ModItemGroups.PRODUCTIVE_BEES))); public static final RegistryObject GENE = createItem("gene", () -> new Gene(new Item.Properties().group(ModItemGroups.PRODUCTIVE_BEES))); diff --git a/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredient.java b/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredient.java index d57dddd04..1ccd32410 100644 --- a/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredient.java +++ b/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredient.java @@ -1,19 +1,5 @@ package cy.jdkdigital.productivebees.integrations.jei.ingredients; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.systems.RenderSystem; -import cy.jdkdigital.productivebees.ProductiveBeesConfig; -import cy.jdkdigital.productivebees.common.entity.bee.ConfigurableBeeEntity; -import cy.jdkdigital.productivebees.common.entity.bee.ProductiveBeeEntity; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.Vector3f; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.passive.BeeEntity; import net.minecraft.network.PacketBuffer; @@ -21,7 +7,6 @@ import net.minecraft.world.World; import net.minecraftforge.registries.ForgeRegistries; -import javax.annotation.Nonnull; import java.util.HashMap; import java.util.Map; @@ -97,118 +82,4 @@ public String toString() { public boolean isConfigurable() { return configurable; } - - public static void render(int xPosition, int yPosition, BeeIngredient beeIngredient, Minecraft minecraft) { - if (ProductiveBeesConfig.CLIENT.renderBeeIngredientAsEntity.get()) { - BeeEntity bee = beeIngredient.getCachedEntity(minecraft.world); - - if (minecraft.player != null && bee != null) { - if (bee instanceof ConfigurableBeeEntity) { - ((ConfigurableBeeEntity) bee).setBeeType(beeIngredient.getBeeType().toString()); - } - - if (bee instanceof ProductiveBeeEntity) { - ((ProductiveBeeEntity) bee).setRenderStatic(); - } - - bee.ticksExisted = minecraft.player.ticksExisted; - bee.renderYawOffset = -20; - - float scaledSize = 18; - - MatrixStack matrixStack = new MatrixStack(); - matrixStack.push(); - matrixStack.translate(7 + xPosition, 12 + yPosition, 1.5); - matrixStack.rotate(Vector3f.ZP.rotationDegrees(190.0F)); - matrixStack.rotate(Vector3f.YP.rotationDegrees(20.0F)); - matrixStack.rotate(Vector3f.XP.rotationDegrees(20.0F)); - matrixStack.translate(0.0F, -0.2F, 1); - matrixStack.scale(scaledSize, scaledSize, scaledSize); - - EntityRendererManager entityrenderermanager = minecraft.getRenderManager(); - IRenderTypeBuffer.Impl buffer = minecraft.getRenderTypeBuffers().getBufferSource(); - entityrenderermanager.renderEntityStatic(bee, 0, 0, 0.0D, minecraft.getRenderPartialTicks(), 1, matrixStack, buffer, 15728880); - buffer.finish(); - matrixStack.pop(); - } - } else { - renderBeeFace(xPosition, yPosition, beeIngredient, minecraft.world); - } - } - - private static final Map> renderSettings = new HashMap>() - {{ - put(0, new HashMap() - {{ - put("scale", 128); - put("iconX", 14); - put("iconY", 14); - put("iconU", 20); - put("iconV", 20); - }}); - put(1, new HashMap() - {{ - put("scale", 128); - put("iconX", 12); - put("iconY", 12); - put("iconU", 20); - put("iconV", 20); - }}); - }}; - private static void renderBeeFace(int xPosition, int yPosition, BeeIngredient beeIngredient, World world) { - RenderSystem.enableBlend(); - RenderSystem.enableAlphaTest(); - ResourceLocation resLocation = getBeeTexture(beeIngredient, world); - Minecraft.getInstance().getTextureManager().bindTexture(resLocation); - - Map iconSettings = renderSettings.get(beeIngredient.getRenderType()); - float[] color = colorCache.get(beeIngredient.getBeeType().toString()); - - float scale = (float) 1 / iconSettings.get("scale"); - int iconX = iconSettings.get("iconX"); - int iconY = iconSettings.get("iconY"); - int iconU = iconSettings.get("iconU"); - int iconV = iconSettings.get("iconV"); - - if (color == null) { - color = new float[] {1.0f, 1.0f, 1.0f}; - } - RenderSystem.color4f(color[0], color[1], color[2], 1.0f); - BufferBuilder renderBuffer = Tessellator.getInstance().getBuffer(); - - renderBuffer.begin(7, DefaultVertexFormats.POSITION_TEX); - renderBuffer.pos(xPosition, yPosition + iconY, 0D).tex((iconU) * scale, (iconV + iconY) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); - renderBuffer.pos(xPosition + iconX, yPosition + iconY, 0D).tex((iconU + iconX) * scale, (iconV + iconY) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); - renderBuffer.pos(xPosition + iconX, yPosition, 0D).tex((iconU + iconX) * scale, (iconV) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); - renderBuffer.pos(xPosition, yPosition, 0D).tex((iconU) * scale, (iconV) * scale).color(color[0], color[1], color[2], 1.0f).endVertex(); - - Tessellator.getInstance().draw(); - - RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); - RenderSystem.disableAlphaTest(); - RenderSystem.disableBlend(); - } - - private static HashMap beeTextureLocations = new HashMap<>(); - private static HashMap colorCache = new HashMap<>(); - public static ResourceLocation getBeeTexture(@Nonnull BeeIngredient ingredient, World world) { - String beeId = ingredient.getBeeType().toString(); - if (beeTextureLocations.get(beeId) != null) { - return beeTextureLocations.get(beeId); - } - - Entity bee = ingredient.getBeeEntity().create(world); - if (bee instanceof ConfigurableBeeEntity) { - ((ConfigurableBeeEntity) bee).setBeeType(ingredient.getBeeType().toString()); - colorCache.put(beeId, ((ConfigurableBeeEntity) bee).getColor(0).getComponents(null)); - } - - EntityRendererManager manager = Minecraft.getInstance().getRenderManager(); - EntityRenderer renderer = manager.getRenderer(bee); - - ResourceLocation resource = renderer.getEntityTexture(bee); - beeTextureLocations.put(beeId, resource); - - return beeTextureLocations.get(beeId); - } } diff --git a/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredientRenderer.java b/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredientRenderer.java index 33a3dce57..086288720 100644 --- a/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredientRenderer.java +++ b/src/main/java/cy/jdkdigital/productivebees/integrations/jei/ingredients/BeeIngredientRenderer.java @@ -1,5 +1,6 @@ package cy.jdkdigital.productivebees.integrations.jei.ingredients; +import cy.jdkdigital.productivebees.client.render.ingredient.BeeRenderer; import cy.jdkdigital.productivebees.setup.BeeReloadListener; import mezz.jei.api.ingredients.IIngredientRenderer; import net.minecraft.client.Minecraft; @@ -23,7 +24,7 @@ public void render(int xPosition, int yPosition, @Nullable BeeIngredient beeIngr Minecraft minecraft = Minecraft.getInstance(); if (minecraft.world != null) { - BeeIngredient.render(xPosition, yPosition, beeIngredient, minecraft); + BeeRenderer.render(xPosition, yPosition, beeIngredient, minecraft); } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 56fa4f7de..e26b7a036 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,6 +1,7 @@ # Make various Block related things public public-f net.minecraft.village.PointOfInterestType field_221075_w # blockStates public-f net.minecraft.village.PointOfInterestType field_221073_u # POIT_BY_BLOCKSTATE +public net.minecraft.world.storage.loot.LootPool field_186453_a # lootEntries public-f net.minecraft.tileentity.TileEntityType field_223046_I # validBlocks public-f net.minecraft.tileentity.TileEntityType field_226985_G_ public-f net.minecraft.tileentity.BeehiveTileEntity field_226958_a_ # bees diff --git a/src/main/resources/assets/productivebees/lang/en_us.json b/src/main/resources/assets/productivebees/lang/en_us.json index 2d9dd1f77..7de701af4 100644 --- a/src/main/resources/assets/productivebees/lang/en_us.json +++ b/src/main/resources/assets/productivebees/lang/en_us.json @@ -18,6 +18,7 @@ "item.productivebees.gene_bottle": "Squashed Bee Material", "item.productivebees.gene": "Gene Sample", "item.productivebees.bee_cage": "Bee Cage", + "item.productivebees.sturdy_bee_cage": "Sturdy Bee Cage", "item.productivebees.draconic_dust": "Draconic Dust", "item.productivebees.draconic_chunk": "Draconic Chunk", "item.productivebees.wither_skull_chip": "Wither Skull Chip", diff --git a/src/main/resources/assets/productivebees/models/item/sturdy_bee_cage.json b/src/main/resources/assets/productivebees/models/item/sturdy_bee_cage.json new file mode 100644 index 000000000..1da38e188 --- /dev/null +++ b/src/main/resources/assets/productivebees/models/item/sturdy_bee_cage.json @@ -0,0 +1,36 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "productivebees:item/bee_cage/bee_cage" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + }, + "overrides": [ + { + "predicate": { + "filled": 1 + }, + "model": "productivebees:item/sturdy_bee_cage_filled" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/productivebees/models/item/sturdy_bee_cage_filled.json b/src/main/resources/assets/productivebees/models/item/sturdy_bee_cage_filled.json new file mode 100644 index 000000000..b522d0a54 --- /dev/null +++ b/src/main/resources/assets/productivebees/models/item/sturdy_bee_cage_filled.json @@ -0,0 +1,6 @@ +{ + "parent": "productivebees:item/sturdy_bee_cage", + "textures": { + "layer0": "productivebees:item/bee_cage/bee_cage_filled" + } +} \ No newline at end of file diff --git a/webrender/models/json/default.json b/webrender/models/json/default.json new file mode 100644 index 000000000..6197f9a46 --- /dev/null +++ b/webrender/models/json/default.json @@ -0,0 +1,74 @@ +{ + "metadata": { + "version": 4.3, + "type": "Object", + "generator": "ObjectExporter" + }, + "geometries": [ + { + "uuid": "C3BF1E70-0BE7-4E6D-B184-C9F1E84A3423", + "type": "BufferGeometry", + "data": { + "attributes": { + "position": { + "itemSize": 3, + "type": "Float32Array", + "array": [50,50,50,...] + }, + "normal": { + "itemSize": 3, + "type": "Float32Array", + "array": [1,0,0,...] + }, + "uv": { + "itemSize": 2, + "type": "Float32Array", + "array": [0,1,...] + } + }, + "boundingSphere": { + "center": [0,0,0], + "radius": 86.60254037844386 + } + } + } + ], + "materials": [ + { + "uuid": "87D95D6C-6BB4-4B8F-8166-A3A6945BA5E3", + "type": "MeshPhongMaterial", + "color": 16777215, + "ambient": 16777215, + "emissive": 0, + "specular": 1118481, + "shininess": 30, + "opacity": 1, + "transparent": false, + "wireframe": false + } + ], + "object": { + "uuid": "89529CC6-CBAC-412F-AFD1-FEEAE785BA19", + "type": "Scene", + "matrix": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1], + "children": [ + { + "uuid": "33FA38D9-0AAC-4657-9BBE-5E5780DDFB2F", + "name": "Box 1", + "type": "Mesh", + "geometry": "C3BF1E70-0BE7-4E6D-B184-C9F1E84A3423", + "material": "87D95D6C-6BB4-4B8F-8166-A3A6945BA5E3", + "matrix": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] + }, + { + "uuid": "16F2E381-2B73-44C4-A7BB-38D7E1CD2381", + "name": "PointLight 1", + "type": "PointLight", + "color": 16777215, + "intensity": 1, + "distance": 0, + "matrix": [1,0,0,0,0,1,0,0,0,0,1,0,100,200,150,1] + } + ] + } +} \ No newline at end of file diff --git a/webrender/three.html b/webrender/three.html new file mode 100644 index 000000000..0b8b3da3e --- /dev/null +++ b/webrender/three.html @@ -0,0 +1,66 @@ + + + + + My first three.js app + + + + + + \ No newline at end of file