From 6220fd13af15fd3183e2fe9927a6675f929d8455 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Wed, 16 Aug 2017 00:27:18 +0200 Subject: [PATCH 1/8] Started working on ability to pick up entities --- .../client/event/RenderEntityEvents.java | 338 ++++++++++++++++++ .../carryon/common/config/CarryOnConfig.java | 6 + .../carryon/common/config/Configs.java | 33 +- .../common/event/ItemEntityEvents.java | 99 +++++ .../common/handler/ForbiddenTileHandler.java | 50 ++- .../common/handler/RegistrationHandler.java | 11 +- .../carryon/common/item/ItemEntity.java | 203 +++++++++++ .../tschipp/carryon/common/item/ItemTile.java | 3 + .../resources/assets/carryon/lang/en_US.lang | 5 +- 9 files changed, 737 insertions(+), 11 deletions(-) create mode 100644 src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java create mode 100644 src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java create mode 100644 src/main/java/tschipp/carryon/common/item/ItemEntity.java diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java new file mode 100644 index 0000000..873866c --- /dev/null +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -0,0 +1,338 @@ +package tschipp.carryon.client.event; + +import java.lang.reflect.Field; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.GuiOpenEvent; +import net.minecraftforge.client.event.MouseEvent; +import net.minecraftforge.client.event.RenderHandEvent; +import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.InputEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.item.ItemEntity; + +public class RenderEntityEvents +{ + + /* + * Prevents the Player from scrolling + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onScroll(MouseEvent event) + { + if (event.getDwheel() > 0 || event.getDwheel() < 0) + { + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity) + { + if (ItemEntity.hasEntityData(stack)) + event.setCanceled(true); + } + } + } + + /* + * Prevents the Player from opening Guis + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onGuiOpen(GuiOpenEvent event) + { + if (event.getGui() != null) + { + boolean inventory = event.getGui() instanceof GuiContainer; + EntityPlayer player = Minecraft.getMinecraft().player; + if (player != null) + { + ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); + if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + event.setCanceled(true); + Minecraft.getMinecraft().currentScreen = null; + } + } + } + } + + /* + * Prevents the Player from switching Slots + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException + { + GameSettings settings = Minecraft.getMinecraft().gameSettings; + Field field = KeyBinding.class.getDeclaredFields()[7]; + field.setAccessible(true); + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + if (settings.keyBindDrop.isPressed()) + { + field.set(settings.keyBindDrop, false); + } + if (settings.keyBindSwapHands.isPressed()) + { + field.set(settings.keyBindSwapHands, false); + } + for (KeyBinding keyBind : settings.keyBindsHotbar) + { + if (keyBind.isPressed()) + { + field.set(keyBind, false); + } + } + } + } + + /* + * Renders the Entity in First Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void renderHand(RenderHandEvent event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = Minecraft.getMinecraft().player; + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + float partialticks = event.getPartialTicks(); + + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + BlockPos pos = player.getPosition(); + Entity entity = ItemEntity.getEntity(stack, world); + if (entity != null) + { + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; + + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + + float height = entity.height; + float width = entity.width; + float multiplier = height * width; + + GlStateManager.pushMatrix(); + GlStateManager.scale(1, 1, 1); + GlStateManager.rotate(180, 0, 1, 0); + GlStateManager.translate(0.0, -height, width + 0.1); + GlStateManager.disableLighting(); + GlStateManager.enableAlpha(); + GlStateManager.color(0, 0, 0, 0); + + if (perspective == 0) + Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); + + GlStateManager.enableLighting(); + GlStateManager.disableAlpha(); + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + + if (perspective == 0) + event.setCanceled(true); + } + } + else + { + event.setCanceled(false); + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); + ModelPlayer modelPlayer = renderPlayer.getMainModel(); + modelPlayer.bipedLeftArm.isHidden = false; + modelPlayer.bipedRightArm.isHidden = false; + } + } + + /* + * Renders the Block in Third Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPost(RenderPlayerEvent.Post event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = event.getEntityPlayer(); + ModelPlayer modelPlayer = event.getRenderer().getMainModel(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + float partialticks = event.getPartialRenderTick(); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + Entity entity = ItemEntity.getEntity(stack, world); + + float rotation = -player.renderYawOffset; + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + + if (entity != null) + { + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; + + double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * (double) partialticks; + double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * (double) partialticks; + double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * (double) partialticks; + + double xOffset = d0 - c0; + double yOffset = d1 - c1; + double zOffset = d2 - d2; + + float height = entity.height; + float width = entity.width; + float multiplier = height * width; + + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + + GlStateManager.pushMatrix(); + GlStateManager.translate(xOffset, yOffset, zOffset); + GlStateManager.scale((10 - multiplier) * 0.08, (10 - multiplier) * 0.08, (10 - multiplier) * 0.08); + GlStateManager.rotate(rotation, 0, 1f, 0); + GlStateManager.translate(0.0, (height / 2) + -(height / 2) + 1, (width - 0.1) < 0.7 ? (width - 0.1) + (0.7 - (width - 0.1)) : (width - 0.1)); + + if (player.isSneaking()) + GlStateManager.translate(0, -0.3, 0); + + Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); + + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + } + } + else + { + modelPlayer.bipedLeftArm.isHidden = false; + modelPlayer.bipedRightArm.isHidden = false; + } + + } + + /* + * Renders correct arm rotation + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPre(RenderPlayerEvent.Pre event) + { + EntityPlayer player = event.getEntityPlayer(); + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + ModelPlayer model = event.getRenderer().getMainModel(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + + ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); + + ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); + ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); + + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + model.bipedBody.childModels.clear(); + + model.bipedLeftArm.isHidden = true; + model.bipedRightArm.isHidden = true; + + Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); + float rotation = -player.renderYawOffset; + if (aplayer.getSkinType().equals("default")) + { + fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); + } + else + { + fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); + } + + if (aplayer.getSkinType().equals("default")) + { + fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); + } + else + { + fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); + } + + if (!player.isSneaking()) + { + fakeRightArm.rotateAngleX = -1.2F; + fakeLeftArm.rotateAngleX = -1.2F; + } + else + { + fakeRightArm.rotateAngleX = -1.7F; + fakeLeftArm.rotateAngleX = -1.7F; + } + + fakeRightArm.rotateAngleY = -0.15f; + fakeLeftArm.rotateAngleY = 0.15f; + + model.bipedBody.addChild(fakeLeftArm); + model.bipedBody.addChild(fakeRightArm); + + } + else + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + model.bipedBody.childModels.clear(); + } + } + + if (stack.isEmpty() || stack.getItem() != RegistrationHandler.itemEntity || !ItemEntity.hasEntityData(stack)) + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + } + + } + + @SideOnly(Side.CLIENT) + private static RenderPlayer getRenderPlayer(AbstractClientPlayer player) + { + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + return manager.getSkinMap().get(player.getSkinType()); + } + + @SideOnly(Side.CLIENT) + private static ModelPlayer getPlayerModel(AbstractClientPlayer player) + { + return getRenderPlayer(player).getMainModel(); + } + +} diff --git a/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java b/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java index f990af3..a52a3ba 100644 --- a/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java +++ b/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java @@ -27,9 +27,15 @@ public class CarryOnConfig { @Config.Comment("Tile Entities that the Player is not allowed to pick up") public static Configs.ForbiddenTiles forbiddenTiles = new Configs.ForbiddenTiles(); + @Config.LangKey(CarryOn.MODID) + @Config.Comment("Entities that the Player is not allowed to pick up") + public static Configs.ForbiddenEntities forbiddenEntities = new Configs.ForbiddenEntities(); + @Config.LangKey(CarryOn.MODID) @Config.Comment("Model Overrides based on NBT or on Meta. Advanced Users Only!") public static Configs.ModelOverrides modelOverrides = new Configs.ModelOverrides(); + + @Mod.EventBusSubscriber public static class EventHandler { diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index 7aa345c..ce15060 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -16,10 +16,41 @@ public class Configs { @Comment("Allow all blocks to be picked up, not just Tile Entites") public boolean pickupAllBlocks = false; - @Comment("Maximum distance from where Blocks can be picked up") + @Comment("Whether Blocks and Entities slow the creative player down when carried") + public boolean slownessInCreative = true; + + @Config.RangeDouble(min = 0) + @Comment("Maximum distance from where Blocks and Entities can be picked up") public double maxDistance = 2.5; + + @Config.RangeDouble(min = 0, max = 10) + @Comment("Max width of entities that can be picked up in survival mode") + public float maxEntityWidth = 1.5f; + + @Config.RangeDouble(min = 0, max = 10) + @Comment("Max height of entities that can be picked up in survival mode") + public float maxEntityHeight = 1.5f; + + @Comment("Whether hostile mobs should be able to picked up in survival mode") + public boolean pickupHostileMobs = false; + + @Comment("Larger Entities slow down the player more") + public boolean heavyEntities = true; } + public static class ForbiddenEntities + { + + @Config.RequiresMcRestart() + @Comment("Entities that cannot be picked up") + public String[] forbiddenEntities = new String[] + { + "minecraft:ender_crystal", + "minecraft:ender_dragon" + }; + } + + public static class ForbiddenTiles { @Config.RequiresMcRestart() diff --git a/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java b/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java new file mode 100644 index 0000000..5058191 --- /dev/null +++ b/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java @@ -0,0 +1,99 @@ +package tschipp.carryon.common.event; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.fml.common.eventhandler.Event.Result; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.handler.ForbiddenTileHandler; +import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.item.ItemEntity; + +public class ItemEntityEvents +{ + + @SubscribeEvent(priority = EventPriority.HIGH) + public void onBlockClick(PlayerInteractEvent.RightClickBlock event) + { + EntityPlayer player = event.getEntityPlayer(); + ItemStack stack = player.getHeldItemMainhand(); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + event.setUseBlock(Result.DENY); + } + + } + + @SubscribeEvent(priority = EventPriority.HIGH) + public void onItemDropped(EntityJoinWorldEvent event) + { + Entity e = event.getEntity(); + World world = event.getWorld(); + if (e instanceof EntityItem) + { + EntityItem eitem = (EntityItem) e; + ItemStack stack = eitem.getEntityItem(); + Item item = stack.getItem(); + if (item == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + BlockPos pos = eitem.getPosition(); + Entity entity = ItemEntity.getEntity(stack, world); + entity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + world.spawnEntity(entity); + + ItemEntity.clearEntityData(stack); + eitem.setEntityItemStack(ItemStack.EMPTY); + } + } + } + + @SubscribeEvent + public void onEntityRightClick(PlayerInteractEvent.EntityInteract event) + { + EntityPlayer player = event.getEntityPlayer(); + ItemStack main = player.getHeldItemMainhand(); + ItemStack off = player.getHeldItemOffhand(); + World world = event.getWorld(); + Entity entity = event.getTarget(); + BlockPos pos = entity.getPosition(); + + if (main.isEmpty() && off.isEmpty() && player.isSneaking()) + { + ItemStack stack = new ItemStack(RegistrationHandler.itemEntity); + + if (!(entity instanceof EntityPlayer) && !ForbiddenTileHandler.isForbidden(entity) && (CarryOnConfig.settings.pickupHostileMobs ? true : !entity.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative()) && (entity.height <= CarryOnConfig.settings.maxEntityHeight && entity.width <= CarryOnConfig.settings.maxEntityWidth || player.isCreative())) + { + double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + + if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + { + if (entity instanceof EntityTameable) + { + EntityTameable tame = (EntityTameable) entity; + if (tame.getOwnerId() != null && tame.getOwnerId() != player.getUUID(player.getGameProfile())) + return; + } + if (ItemEntity.storeEntityData(entity, world, stack)) + { + entity.setDead(); + player.setHeldItem(EnumHand.MAIN_HAND, stack); + } + } + + } + + } + } + +} diff --git a/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java b/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java index 1618017..d118e7a 100644 --- a/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java @@ -4,31 +4,45 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraftforge.fml.common.registry.ForgeRegistries; import tschipp.carryon.common.config.CarryOnConfig; public class ForbiddenTileHandler { public static final List FORBIDDEN_TILES; - + public static final List FORBIDDEN_ENTITIES; + public static boolean isForbidden(Block block) { return FORBIDDEN_TILES.contains(block.getRegistryName().toString()); } - + + public static boolean isForbidden(Entity entity) + { + if (EntityList.getKey(entity) != null) + { + String name = EntityList.getKey(entity).toString(); + boolean contains = FORBIDDEN_ENTITIES.contains(name); + return contains; + } + return true; + } + static { String[] forbidden = CarryOnConfig.forbiddenTiles.forbiddenTiles; - FORBIDDEN_TILES = new ArrayList(); - - for(int i = 0; i < forbidden.length; i++) + + for (int i = 0; i < forbidden.length; i++) { - if(forbidden[i].contains("*")) + if (forbidden[i].contains("*")) { String modid = forbidden[i].replace("*", ""); - for(int k = 0; k < Block.REGISTRY.getKeys().size(); k++) + for (int k = 0; k < Block.REGISTRY.getKeys().size(); k++) { - if(Block.REGISTRY.getKeys().toArray()[k].toString().contains(modid)) + if (Block.REGISTRY.getKeys().toArray()[k].toString().contains(modid)) { FORBIDDEN_TILES.add(Block.REGISTRY.getKeys().toArray()[k].toString()); } @@ -36,5 +50,25 @@ public class ForbiddenTileHandler } FORBIDDEN_TILES.add(forbidden[i]); } + + String[] forbiddenEntity = CarryOnConfig.forbiddenEntities.forbiddenEntities; + FORBIDDEN_ENTITIES = new ArrayList(); + + for (int i = 0; i < forbiddenEntity.length; i++) + { + if (forbiddenEntity[i].contains("*")) + { + String modid = forbiddenEntity[i].replace("*", ""); + for (int k = 0; k < ForgeRegistries.ENTITIES.getKeys().size(); k++) + { + if (ForgeRegistries.ENTITIES.getKeys().toArray()[k].toString().contains(modid)) + { + FORBIDDEN_ENTITIES.add(ForgeRegistries.ENTITIES.getKeys().toArray()[k].toString()); + } + } + } + FORBIDDEN_ENTITIES.add(forbiddenEntity[i]); + } } + } diff --git a/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java b/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java index c920ffc..987fe49 100644 --- a/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java @@ -5,32 +5,40 @@ import net.minecraft.item.Item; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.MinecraftForge; import tschipp.carryon.CarryOn; +import tschipp.carryon.client.event.RenderEntityEvents; import tschipp.carryon.client.event.RenderEvents; +import tschipp.carryon.common.event.ItemEntityEvents; import tschipp.carryon.common.event.ItemEvents; +import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.common.item.ItemTile; public class RegistrationHandler { public static Item itemTile; - + public static Item itemEntity; + public static void regItems() { itemTile = new ItemTile(); + itemEntity = new ItemEntity(); } public static void regItemRenders() { ModelLoader.setCustomModelResourceLocation(itemTile, 0, new ModelResourceLocation(CarryOn.MODID + ":" + "tile", "inventory")); + ModelLoader.setCustomModelResourceLocation(itemEntity, 0, new ModelResourceLocation(CarryOn.MODID + ":" + "tile", "inventory")); } public static void regCommonEvents() { MinecraftForge.EVENT_BUS.register(new ItemEvents()); + MinecraftForge.EVENT_BUS.register(new ItemEntityEvents()); } public static void regClientEvents() { MinecraftForge.EVENT_BUS.register(new RenderEvents()); + MinecraftForge.EVENT_BUS.register(new RenderEntityEvents()); } public static void regOverrideList() @@ -38,5 +46,6 @@ public class RegistrationHandler ModelOverridesHandler.initOverrides(); } + } diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java new file mode 100644 index 0000000..91b907b --- /dev/null +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -0,0 +1,203 @@ +package tschipp.carryon.common.item; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.registry.GameRegistry; +import tschipp.carryon.CarryOn; +import tschipp.carryon.common.config.CarryOnConfig; + +public class ItemEntity extends Item +{ + + public static final String ENTITY_DATA_KEY = "entityData"; + + public ItemEntity() + { + this.setUnlocalizedName("tile_entity"); + this.setRegistryName(CarryOn.MODID, "tile_entity"); + GameRegistry.register(this); + this.setMaxStackSize(1); + } + + @Override + public String getItemStackDisplayName(ItemStack stack) + { + if (hasEntityData(stack)) + { + return I18n.translateToLocal(EntityList.getTranslationName(new ResourceLocation(getEntityName(stack)))); + } + + return ""; + } + + public static boolean hasEntityData(ItemStack stack) + { + if (stack.hasTagCompound()) + { + NBTTagCompound tag = stack.getTagCompound(); + return tag.hasKey(ENTITY_DATA_KEY) && tag.hasKey("entity"); + } + return false; + } + + public static boolean storeEntityData(@Nonnull Entity entity, World world, ItemStack stack) + { + if (entity == null) + return false; + + if (stack.isEmpty()) + return false; + + NBTTagCompound entityData = new NBTTagCompound(); + entityData = entity.writeToNBT(entityData); + + String name = EntityList.getKey(entity).toString(); + + NBTTagCompound tag = stack.hasTagCompound() ? stack.getTagCompound() : new NBTTagCompound(); + if (tag.hasKey(ENTITY_DATA_KEY)) + return false; + + tag.setTag(ENTITY_DATA_KEY, entityData); + tag.setString("entity", name); + stack.setTagCompound(tag); + return true; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack stack = player.getHeldItem(hand); + Block block = world.getBlockState(pos).getBlock(); + + if (hasEntityData(stack)) + { + BlockPos finalPos = pos; + + if (!block.isReplaceable(world, pos)) + { + finalPos = pos.offset(facing); + } + + Entity entity = getEntity(stack, world); + if (entity != null) + { + if (!world.isRemote) + { + entity.setPositionAndRotation(finalPos.getX() + 0.5, finalPos.getY(), finalPos.getZ() + 0.5, 180 + player.rotationYawHead, 0.0f); + world.spawnEntity(entity); + if (entity instanceof EntityLiving) + { + ((EntityLiving) entity).playLivingSound(); + } + clearEntityData(stack); + player.setHeldItem(hand, ItemStack.EMPTY); + } + return EnumActionResult.SUCCESS; + } + } + + return EnumActionResult.FAIL; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) + { + if (hasEntityData(stack)) + { + if(getEntity(stack, world) == null) + stack = ItemStack.EMPTY; + + if (entity instanceof EntityLivingBase) + { + if(entity instanceof EntityPlayer && CarryOnConfig.settings.slownessInCreative ? false : ((EntityPlayer)entity).isCreative()) + return; + + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 1, potionLevel(stack, world), false, false)); + } + + } + else + { + stack = ItemStack.EMPTY; + } + } + + public static void clearEntityData(ItemStack stack) + { + if (stack.hasTagCompound()) + { + NBTTagCompound tag = stack.getTagCompound(); + tag.removeTag(ENTITY_DATA_KEY); + tag.removeTag("entity"); + } + } + + public static NBTTagCompound getEntityData(ItemStack stack) + { + if (stack.hasTagCompound()) + { + NBTTagCompound tag = stack.getTagCompound(); + return tag.getCompoundTag(ENTITY_DATA_KEY); + } + return null; + } + + public static Entity getEntity(ItemStack stack, World world) + { + if (world == null) + return null; + + String name = getEntityName(stack); + + NBTTagCompound e = getEntityData(stack); + Entity entity = EntityList.createEntityByIDFromName(new ResourceLocation(name), world); + if (entity != null) + entity.readFromNBT(e); + + return entity; + } + + public static String getEntityName(ItemStack stack) + { + if (stack.hasTagCompound()) + { + NBTTagCompound tag = stack.getTagCompound(); + return tag.getString("entity"); + } + return null; + } + + private int potionLevel(ItemStack stack, World world) + { + Entity e = getEntity(stack, world); + if(e == null) + return 1; + + int i = (int) (e.height * e.width); + if (i > 4) + i = 4; + + if (!CarryOnConfig.settings.heavyEntities) + i = 1; + + return i; + } +} diff --git a/src/main/java/tschipp/carryon/common/item/ItemTile.java b/src/main/java/tschipp/carryon/common/item/ItemTile.java index 1361f2a..d5143c9 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemTile.java +++ b/src/main/java/tschipp/carryon/common/item/ItemTile.java @@ -136,6 +136,9 @@ public class ItemTile extends Item { if (entity instanceof EntityLivingBase) { + if(entity instanceof EntityPlayer && CarryOnConfig.settings.slownessInCreative ? false : ((EntityPlayer)entity).isCreative()) + return; + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 1, potionLevel(stack), false, false)); } } diff --git a/src/main/resources/assets/carryon/lang/en_US.lang b/src/main/resources/assets/carryon/lang/en_US.lang index 7bcdd2d..88ef6f8 100644 --- a/src/main/resources/assets/carryon/lang/en_US.lang +++ b/src/main/resources/assets/carryon/lang/en_US.lang @@ -1,5 +1,8 @@ carryon.category.settings=Settings carryon.category.forbiddentiles=Forbidden Tile Entities carryon.category.modeloverrides=Model Overrides (Advanced) +carryon.category.forbiddenentities=Forbidden Entities -carryon.general.modeloverrides.modeloverrides=Model Overrides \ No newline at end of file +carryon.general.modeloverrides.modeloverrides=Model Overrides +carryon.general.forbiddenentities.forbiddenentities=Entities that the Player cannot pick up +carryon.general.forbiddentiles.forbiddentiles=Blocks that the Player cannot pick up \ No newline at end of file From ecbc1e1fcf4373a1e0db97b21276e61c3e95daf4 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Wed, 16 Aug 2017 01:17:30 +0200 Subject: [PATCH 2/8] Fixed double arms again --- .../client/event/RenderEntityEvents.java | 118 +----------------- .../carryon/client/event/RenderEvents.java | 77 ++++++++---- .../carryon/common/config/Configs.java | 4 +- 3 files changed, 63 insertions(+), 136 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 873866c..22d6290 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -32,6 +32,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemEntity; +import tschipp.carryon.common.item.ItemTile; public class RenderEntityEvents { @@ -161,16 +162,7 @@ public class RenderEntityEvents event.setCanceled(true); } } - else - { - event.setCanceled(false); - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); - ModelPlayer modelPlayer = renderPlayer.getMainModel(); - modelPlayer.bipedLeftArm.isHidden = false; - modelPlayer.bipedRightArm.isHidden = false; - } + } /* @@ -205,13 +197,13 @@ public class RenderEntityEvents double xOffset = d0 - c0; double yOffset = d1 - c1; - double zOffset = d2 - d2; + double zOffset = d2 - c2; float height = entity.height; float width = entity.width; float multiplier = height * width; - entity.setPosition(d0, d1, d2); + entity.setPosition(c0, c1, c2); entity.rotationYaw = 0.0f; entity.prevRotationYaw = 0.0f; entity.setRotationYawHead(0.0f); @@ -231,108 +223,10 @@ public class RenderEntityEvents GlStateManager.popMatrix(); } } - else - { - modelPlayer.bipedLeftArm.isHidden = false; - modelPlayer.bipedRightArm.isHidden = false; - } + } - /* - * Renders correct arm rotation - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPre(RenderPlayerEvent.Pre event) - { - EntityPlayer player = event.getEntityPlayer(); - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - ModelPlayer model = event.getRenderer().getMainModel(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - - ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); - - ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); - ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); - - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - model.bipedBody.childModels.clear(); - - model.bipedLeftArm.isHidden = true; - model.bipedRightArm.isHidden = true; - - Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); - float rotation = -player.renderYawOffset; - if (aplayer.getSkinType().equals("default")) - { - fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); - } - else - { - fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); - } - - if (aplayer.getSkinType().equals("default")) - { - fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); - } - else - { - fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); - } - - if (!player.isSneaking()) - { - fakeRightArm.rotateAngleX = -1.2F; - fakeLeftArm.rotateAngleX = -1.2F; - } - else - { - fakeRightArm.rotateAngleX = -1.7F; - fakeLeftArm.rotateAngleX = -1.7F; - } - - fakeRightArm.rotateAngleY = -0.15f; - fakeLeftArm.rotateAngleY = 0.15f; - - model.bipedBody.addChild(fakeLeftArm); - model.bipedBody.addChild(fakeRightArm); - - } - else - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - { - model.bipedBody.childModels.clear(); - } - } - - if (stack.isEmpty() || stack.getItem() != RegistrationHandler.itemEntity || !ItemEntity.hasEntityData(stack)) - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - } - - } - - @SideOnly(Side.CLIENT) - private static RenderPlayer getRenderPlayer(AbstractClientPlayer player) - { - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - return manager.getSkinMap().get(player.getSkinType()); - } - - @SideOnly(Side.CLIENT) - private static ModelPlayer getPlayerModel(AbstractClientPlayer player) - { - return getRenderPlayer(player).getMainModel(); - } + } diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index b1a8b7c..3adf604 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -8,7 +8,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GlStateManager; @@ -21,6 +20,7 @@ import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHand; @@ -38,6 +38,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.common.item.ItemTile; public class RenderEvents @@ -159,13 +160,16 @@ public class RenderEvents } else { - event.setCanceled(false); - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); - ModelPlayer modelPlayer = renderPlayer.getMainModel(); - modelPlayer.bipedLeftArm.isHidden = false; - modelPlayer.bipedRightArm.isHidden = false; + if (stack.isEmpty() ? true : stack.getItem() != RegistrationHandler.itemEntity) + { + event.setCanceled(false); + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); + ModelPlayer modelPlayer = renderPlayer.getMainModel(); + modelPlayer.bipedLeftArm.isHidden = false; + modelPlayer.bipedRightArm.isHidden = false; + } } } @@ -181,6 +185,7 @@ public class RenderEvents ModelPlayer modelPlayer = event.getRenderer().getMainModel(); EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; ItemStack stack = player.getHeldItemMainhand(); + float partialticks = event.getPartialRenderTick(); if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) { Block block = ItemTile.getBlock(stack); @@ -196,9 +201,17 @@ public class RenderEvents float rotation = -player.renderYawOffset; int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; - double xOffset = (double) player.posX - (double) clientPlayer.posX; - double yOffset = (double) player.posY - (double) clientPlayer.posY; - double zOffset = (double) player.posZ - (double) clientPlayer.posZ; + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; + + double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * (double) partialticks; + double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * (double) partialticks; + double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * (double) partialticks; + + double xOffset = d0 - c0; + double yOffset = d1 - c1; + double zOffset = d2 - c2; GlStateManager.pushMatrix(); GlStateManager.translate(xOffset, yOffset, zOffset); @@ -225,11 +238,7 @@ public class RenderEvents GlStateManager.popMatrix(); } - else - { - modelPlayer.bipedLeftArm.isHidden = false; - modelPlayer.bipedRightArm.isHidden = false; - } + } @@ -251,11 +260,13 @@ public class RenderEvents ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + if (!stack.isEmpty() && (stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) || (stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))) { if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) model.bipedBody.childModels.clear(); + Item item = stack.getItem(); + model.bipedLeftArm.isHidden = true; model.bipedRightArm.isHidden = true; @@ -279,15 +290,35 @@ public class RenderEvents fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); } - if (!player.isSneaking()) + if (item == RegistrationHandler.itemTile) { - fakeRightArm.rotateAngleX = -.9F; - fakeLeftArm.rotateAngleX = -.9F; + if (!player.isSneaking()) + { + fakeRightArm.rotateAngleX = -.9F; + fakeLeftArm.rotateAngleX = -.9F; + } + else + { + fakeRightArm.rotateAngleX = -1.4F; + fakeLeftArm.rotateAngleX = -1.4F; + } } else { - fakeRightArm.rotateAngleX = -1.4F; - fakeLeftArm.rotateAngleX = -1.4F; + if (!player.isSneaking()) + { + fakeRightArm.rotateAngleX = -1.2F; + fakeLeftArm.rotateAngleX = -1.2F; + } + else + { + fakeRightArm.rotateAngleX = -1.7F; + fakeLeftArm.rotateAngleX = -1.7F; + } + + fakeRightArm.rotateAngleY = -0.15f; + fakeLeftArm.rotateAngleY = 0.15f; + } model.bipedBody.addChild(fakeLeftArm); model.bipedBody.addChild(fakeRightArm); @@ -303,7 +334,7 @@ public class RenderEvents } } - if (stack.isEmpty() || stack.getItem() != RegistrationHandler.itemTile || !ItemTile.hasTileData(stack)) + if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) { model.bipedLeftArm.isHidden = false; model.bipedRightArm.isHidden = false; diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index ce15060..8f58edb 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -46,7 +46,9 @@ public class Configs { public String[] forbiddenEntities = new String[] { "minecraft:ender_crystal", - "minecraft:ender_dragon" + "minecraft:ender_dragon", + "minecraft:ghast", + "minecraft:shulker" }; } From 68dc8dd9f2a3daa39169d59f829ef93189bc91b9 Mon Sep 17 00:00:00 2001 From: Purplicious_Cow Date: Wed, 16 Aug 2017 21:59:56 +0200 Subject: [PATCH 3/8] Auto stash before merge of "master" and "origin/master" --- .../carryon/client/event/RenderEvents.java | 140 +++++++++--------- 1 file changed, 72 insertions(+), 68 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 3adf604..e504fd2 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -31,6 +31,7 @@ import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.relauncher.Side; @@ -238,7 +239,7 @@ public class RenderEvents GlStateManager.popMatrix(); } - + } @@ -249,95 +250,98 @@ public class RenderEvents @SubscribeEvent public void onPlayerRenderPre(RenderPlayerEvent.Pre event) { - EntityPlayer player = event.getEntityPlayer(); - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - ModelPlayer model = event.getRenderer().getMainModel(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + if (!Loader.isModLoaded("mobends")) { - ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); + EntityPlayer player = event.getEntityPlayer(); + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + ModelPlayer model = event.getRenderer().getMainModel(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); - ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); + ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); - if (!stack.isEmpty() && (stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) || (stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))) - { - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - model.bipedBody.childModels.clear(); + ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); + ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); - Item item = stack.getItem(); - - model.bipedLeftArm.isHidden = true; - model.bipedRightArm.isHidden = true; - - Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); - float rotation = -player.renderYawOffset; - if (aplayer.getSkinType().equals("default")) + if (!stack.isEmpty() && (stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) || (stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))) { - fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); - } - else - { - fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); - } + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + model.bipedBody.childModels.clear(); - if (aplayer.getSkinType().equals("default")) - { - fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); - } - else - { - fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); - } + Item item = stack.getItem(); - if (item == RegistrationHandler.itemTile) - { - if (!player.isSneaking()) + model.bipedLeftArm.isHidden = true; + model.bipedRightArm.isHidden = true; + + Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); + float rotation = -player.renderYawOffset; + if (aplayer.getSkinType().equals("default")) { - fakeRightArm.rotateAngleX = -.9F; - fakeLeftArm.rotateAngleX = -.9F; + fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); } else { - fakeRightArm.rotateAngleX = -1.4F; - fakeLeftArm.rotateAngleX = -1.4F; + fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); } - } - else - { - if (!player.isSneaking()) + + if (aplayer.getSkinType().equals("default")) { - fakeRightArm.rotateAngleX = -1.2F; - fakeLeftArm.rotateAngleX = -1.2F; + fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); } else { - fakeRightArm.rotateAngleX = -1.7F; - fakeLeftArm.rotateAngleX = -1.7F; + fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); } - - fakeRightArm.rotateAngleY = -0.15f; - fakeLeftArm.rotateAngleY = 0.15f; + + if (item == RegistrationHandler.itemTile) + { + if (!player.isSneaking()) + { + fakeRightArm.rotateAngleX = -.9F; + fakeLeftArm.rotateAngleX = -.9F; + } + else + { + fakeRightArm.rotateAngleX = -1.4F; + fakeLeftArm.rotateAngleX = -1.4F; + } + } + else + { + if (!player.isSneaking()) + { + fakeRightArm.rotateAngleX = -1.2F; + fakeLeftArm.rotateAngleX = -1.2F; + } + else + { + fakeRightArm.rotateAngleX = -1.7F; + fakeLeftArm.rotateAngleX = -1.7F; + } + + fakeRightArm.rotateAngleY = -0.15f; + fakeLeftArm.rotateAngleY = 0.15f; + + } + model.bipedBody.addChild(fakeLeftArm); + model.bipedBody.addChild(fakeRightArm); } - model.bipedBody.addChild(fakeLeftArm); - model.bipedBody.addChild(fakeRightArm); - - } - else - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + else { - model.bipedBody.childModels.clear(); + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + model.bipedBody.childModels.clear(); + } } - } - if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; + if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + } } } From f187d6295f16199e7082a9eb44434dfb1d6463c8 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Wed, 16 Aug 2017 22:25:56 +0200 Subject: [PATCH 4/8] Biome Color Rendering, Change to model overrides --- .../client/event/RenderEntityEvents.java | 75 +++++++++++---- .../carryon/client/event/RenderEvents.java | 52 +++++++++-- .../carryon/common/config/Configs.java | 18 +++- .../common/handler/ModelOverridesHandler.java | 88 ++++++++++++++---- .../carryon/common/item/ItemEntity.java | 4 +- .../tschipp/carryon/common/item/ItemTile.java | 19 +++- .../assets/carryon/textures/items/tile.png | Bin 194 -> 198 bytes 7 files changed, 207 insertions(+), 49 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 22d6290..8066f60 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -132,28 +132,29 @@ public class RenderEntityEvents double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; - + entity.setPosition(d0, d1, d2); entity.rotationYaw = 0.0f; entity.prevRotationYaw = 0.0f; entity.setRotationYawHead(0.0f); - + float height = entity.height; float width = entity.width; float multiplier = height * width; - + GlStateManager.pushMatrix(); GlStateManager.scale(1, 1, 1); GlStateManager.rotate(180, 0, 1, 0); GlStateManager.translate(0.0, -height, width + 0.1); - GlStateManager.disableLighting(); GlStateManager.enableAlpha(); - GlStateManager.color(0, 0, 0, 0); - - if (perspective == 0) + + if (perspective == 0) + { + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); - - GlStateManager.enableLighting(); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + } + GlStateManager.disableAlpha(); GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); @@ -162,7 +163,7 @@ public class RenderEntityEvents event.setCanceled(true); } } - + } /* @@ -194,20 +195,20 @@ public class RenderEntityEvents double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * (double) partialticks; double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * (double) partialticks; double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * (double) partialticks; - + double xOffset = d0 - c0; double yOffset = d1 - c1; double zOffset = d2 - c2; - + float height = entity.height; float width = entity.width; float multiplier = height * width; - + entity.setPosition(c0, c1, c2); entity.rotationYaw = 0.0f; entity.prevRotationYaw = 0.0f; entity.setRotationYawHead(0.0f); - + GlStateManager.pushMatrix(); GlStateManager.translate(xOffset, yOffset, zOffset); GlStateManager.scale((10 - multiplier) * 0.08, (10 - multiplier) * 0.08, (10 - multiplier) * 0.08); @@ -217,16 +218,58 @@ public class RenderEntityEvents if (player.isSneaking()) GlStateManager.translate(0, -0.3, 0); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); } } - } - + public void renderEntityStatic(Entity entityIn, float partialTicks, boolean p_188388_3_) + { + Field fieldX = RenderManager.class.getDeclaredFields()[4]; + Field fieldY = RenderManager.class.getDeclaredFields()[5]; + Field fieldZ = RenderManager.class.getDeclaredFields()[6]; + fieldX.setAccessible(true); + fieldY.setAccessible(true); + fieldZ.setAccessible(true); + + RenderManager manager = Minecraft.getMinecraft().getRenderManager(); + + if (entityIn.ticksExisted == 0) + { + entityIn.lastTickPosX = entityIn.posX; + entityIn.lastTickPosY = entityIn.posY; + entityIn.lastTickPosZ = entityIn.posZ; + } + + double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks; + double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks; + double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks; + float f = entityIn.prevRotationYaw + (entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks; + int i = entityIn.getBrightnessForRender(partialTicks); + + if (entityIn.isBurning()) + { + i = 15728880; + } + + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + try + { + manager.doRenderEntity(entityIn, d0 - fieldX.getDouble(manager), d1 - fieldY.getDouble(manager), d2 - fieldZ.getDouble(manager), f, partialTicks, p_188388_3_); + } + catch (IllegalArgumentException | IllegalAccessException e) + { + e.printStackTrace(); + } + } } diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 3adf604..4b24ac9 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -150,8 +150,21 @@ public class RenderEvents GlStateManager.rotate(8, 1f, 0, 0); if (perspective == 0) - Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player)); - + { + IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, tag); + if (override instanceof ItemStack) + { + Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + } + else + Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + } + else + Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + } GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); @@ -231,14 +244,23 @@ public class RenderEvents if (player.isSneaking()) GlStateManager.translate(0, -0.3, 0); - IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); - Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); - + IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, tag); + if (override instanceof ItemStack) + { + Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + } + else + Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); + } + else + Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); } - } @@ -269,7 +291,6 @@ public class RenderEvents model.bipedLeftArm.isHidden = true; model.bipedRightArm.isHidden = true; - Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); float rotation = -player.renderYawOffset; if (aplayer.getSkinType().equals("default")) @@ -315,7 +336,7 @@ public class RenderEvents fakeRightArm.rotateAngleX = -1.7F; fakeLeftArm.rotateAngleX = -1.7F; } - + fakeRightArm.rotateAngleY = -0.15f; fakeLeftArm.rotateAngleY = 0.15f; @@ -334,7 +355,7 @@ public class RenderEvents } } - if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) + if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) { model.bipedLeftArm.isHidden = false; model.bipedRightArm.isHidden = false; @@ -361,4 +382,17 @@ public class RenderEvents return getRenderPlayer(player).getMainModel(); } + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void hideItems(RenderPlayerEvent.Specials.Pre event) + { + EntityPlayer player = event.getEntityPlayer(); + ItemStack stack = player.getHeldItemMainhand(); + + if (stack != null && (stack.getItem() == RegistrationHandler.itemTile || stack.getItem() == RegistrationHandler.itemEntity)) + { + event.setRenderItem(false); + } + } + } diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index 8f58edb..f4e94cf 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -63,6 +63,13 @@ public class Configs { "minecraft:end_gateway", "minecraft:double_plant", "minecraft:bed", + "minecraft:wooden_door", + "minecraft:iron_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:jungle_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", "animania:block_trough", "animania:block_invisiblock", "colossalchests:*", @@ -95,7 +102,16 @@ public class Configs { public String[] modelOverrides = new String[] { "minecraft:lit_furnace->minecraft:furnace", - "minecraft:bed->minecraft:bed", + "minecraft:hopper->(block)minecraft:hopper", + "minecraft:unpowered_comparator->(block)minecraft:unpowered_comparator", + "minecraft:unpowered_repeater->(block)minecraft:unpowered_repeater", + "minecraft:powered_comparator->(block)minecraft:powered_comparator", + "minecraft:powered_repeater->(block)minecraft:powered_repeater", + "minecraft:cauldron->(block)minecraft:cauldron", + "minecraft:brewing_stand->(item)minecraft:brewing_stand", + "minecraft:tallgrass;1->(item)minecraft:tallgrass;1", + "minecraft:tallgrass;2->(item)minecraft:tallgrass;2", + "minecraft:flower_pot->(block)minecraft:flower_pot", "quark:custom_chest{type:\"spruce\"}->quark:custom_chest;0", "quark:custom_chest{type:\"birch\"}->quark:custom_chest;1", "quark:custom_chest{type:\"jungle\"}->quark:custom_chest;2", diff --git a/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java b/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java index 1f3bfda..2d8885c 100644 --- a/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java @@ -4,26 +4,21 @@ import java.util.HashMap; import java.util.Set; import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.Level; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.IBakedModel; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.JsonToNBT; import net.minecraft.nbt.NBTException; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTUtil; -import net.minecraft.util.IntHashMap; +import net.minecraft.world.World; import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.registry.IForgeRegistryEntry; -import net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import tschipp.carryon.CarryOn; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.helper.InvalidConfigException; import tschipp.carryon.common.helper.StringParser; @@ -43,14 +38,14 @@ public class ModelOverridesHandler for (int i = 0; i < overrides.length; i++) { boolean errored = false; - + Object toOverrideObject; Object overrideObject; NBTTagCompound tag = new NBTTagCompound(); String currentline = overrides[i]; if (StringUtils.isEmpty(currentline) || !StringUtils.contains(currentline, "->")) - new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); String[] sa = currentline.split("->"); String toOverride = ""; @@ -63,7 +58,7 @@ public class ModelOverridesHandler catch (ArrayIndexOutOfBoundsException e) { errored = true; - new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); } if (toOverride.contains("{")) @@ -71,7 +66,7 @@ public class ModelOverridesHandler if (!toOverride.contains("}")) { errored = true; - new InvalidConfigException("Missing } at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing } at line " + i + " : " + currentline).printException(); } String nbt = toOverride.substring(toOverride.indexOf("{")); @@ -83,14 +78,35 @@ public class ModelOverridesHandler catch (NBTException e) { errored = true; - new InvalidConfigException("Error while parsing NBT at line " + i + " : " + e.getMessage()).printException(); + new InvalidConfigException("Error while parsing NBT at line " + i + " : " + e.getMessage()).printException(); } } else if (toOverride.contains("}")) { errored = true; - new InvalidConfigException("Missing { at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing { at line " + i + " : " + currentline).printException(); + } + + String overridetype = "item"; + if (override.contains("(")) + { + if (!override.contains(")")) + { + errored = true; + new InvalidConfigException("Missing ) at line " + i + " : " + currentline).printException(); + } + + overridetype = override.substring(0, override.indexOf(")") + 1); + override =override.replace(overridetype, ""); + overridetype = overridetype.replace("(", ""); + overridetype = overridetype.replace(")", ""); + + } + else if (override.contains(")")) + { + errored = true; + new InvalidConfigException("Missing ( at line " + i + " : " + currentline).printException(); } String modidToOverride = "minecraft"; @@ -113,12 +129,10 @@ public class ModelOverridesHandler if (toOverrideObject != null) { - overrideObject = StringParser.getItem(override); - - if (Block.getBlockFromItem((Item) overrideObject) != Blocks.AIR) - overrideObject = StringParser.getItemStack(override); - else + if (overridetype.equals("block")) overrideObject = StringParser.getBlockState(override); + else + overrideObject = StringParser.getItemStack(override); if (overrideObject != null) { @@ -176,7 +190,7 @@ public class ModelOverridesHandler } @SideOnly(Side.CLIENT) - public static IBakedModel getCustomOverrideModel(IBlockState state, NBTTagCompound tag) + public static IBakedModel getCustomOverrideModel(IBlockState state, NBTTagCompound tag, World world, EntityPlayer player) { int stateid = Block.getStateId(state); NBTTagCompound[] keys = new NBTTagCompound[OVERRIDE_OBJECTS.size()]; @@ -209,7 +223,7 @@ public class ModelOverridesHandler if (override instanceof IBlockState) return Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState((IBlockState) override); else - return Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getItemModel((ItemStack) override); + return Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides((ItemStack) override, world, player); } } } @@ -217,5 +231,39 @@ public class ModelOverridesHandler return null; } + + public static Object getOverrideObject(IBlockState state, NBTTagCompound tag) + { + int stateid = Block.getStateId(state); + NBTTagCompound[] keys = new NBTTagCompound[OVERRIDE_OBJECTS.size()]; + OVERRIDE_OBJECTS.keySet().toArray(keys); + for (NBTTagCompound key : keys) + { + int id = key.getInteger("stateid"); + Block block = StringParser.getBlock(key.getString("block")); + if (id == 0 ? block == state.getBlock() : id == stateid) + { + NBTTagCompound toCheckForCompound = key.getCompoundTag("nbttag"); + Set kSetToCheck = toCheckForCompound.getKeySet(); + Set kSetTile = tag.getKeySet(); + + boolean flag = true; + if (kSetTile.containsAll(kSetToCheck)) + { + for (String skey : kSetToCheck) + { + if (!NBTUtil.areNBTEquals(tag.getTag(skey), toCheckForCompound.getTag(skey), true)) + flag = false; + } + if (flag) + { + Object override = OVERRIDE_OBJECTS.get(key); + return override; + } + } + } + } + return null; + } } diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java index 91b907b..c7a3649 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemEntity.java +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -31,8 +31,8 @@ public class ItemEntity extends Item public ItemEntity() { - this.setUnlocalizedName("tile_entity"); - this.setRegistryName(CarryOn.MODID, "tile_entity"); + this.setUnlocalizedName("entity_item"); + this.setRegistryName(CarryOn.MODID, "entity_item"); GameRegistry.register(this); this.setMaxStackSize(1); } diff --git a/src/main/java/tschipp/carryon/common/item/ItemTile.java b/src/main/java/tschipp/carryon/common/item/ItemTile.java index d5143c9..c2827ed 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemTile.java +++ b/src/main/java/tschipp/carryon/common/item/ItemTile.java @@ -31,6 +31,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import tschipp.carryon.CarryOn; import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.handler.ModelOverridesHandler; public class ItemTile extends Item { @@ -50,6 +51,22 @@ public class ItemTile extends Item { if (hasTileData(stack)) { + IBlockState state = getBlockState(stack); + NBTTagCompound nbt = getTileData(stack); + + if(ModelOverridesHandler.hasCustomOverrideModel(state, nbt)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, nbt); + if(override instanceof ItemStack) + return ((ItemStack)override).getDisplayName(); + else + { + IBlockState ostate = (IBlockState) override; + ItemStack itemstack = new ItemStack(ostate.getBlock().getItemDropped(ostate, this.itemRand, 0), 1, state.getBlock().damageDropped(ostate)); + return itemstack.getDisplayName(); + } + } + return getItemStack(stack).getDisplayName(); } @@ -176,7 +193,7 @@ public class ItemTile extends Item tag.setTag(TILE_DATA_KEY, chest); - ItemStack drop = state.getBlock().getItem(world, pos, state); + ItemStack drop = new ItemStack(state.getBlock().getItemDropped(state, itemRand, 0), 1, state.getBlock().damageDropped(state)); tag.setString("block", state.getBlock().getRegistryName().toString()); Item item = Item.getItemFromBlock(state.getBlock()); diff --git a/src/main/resources/assets/carryon/textures/items/tile.png b/src/main/resources/assets/carryon/textures/items/tile.png index 98a62941974e35c32ac3ee9a7b3096a8e8df281b..8241ee753f473bfcf609b90f253a94d177b53454 100644 GIT binary patch delta 170 zcmX@ac#Ls^NGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x37)1YoFr&Qr z=2oDfWQl7;NpOBzNqJ&XDnmhHW?qS2UTTSgiJpO;p_xnO`maDmW}YsNAr}5iPiz!q zP+(wI{2p(m=kRboD{uO3@w9_FGgvn#h@EMQG*IS7@P6h!XF9s}ul$R?)9-*rFnGH9 KxvXS?=U~&qt&h!s>O?^5oQqNuOEUBG6hbm{QyDDuE%Xh| zD~_!<2ASjO;uvDloBZehe|u)thEAos@{8GeqztkSC>Sv?B+p`&-DYF53#gF6)78&q Iol`;+0AUw1y#N3J From 4210a6a00d717ef589627fa9bf2efb865d215252 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Sat, 19 Aug 2017 16:47:22 +0200 Subject: [PATCH 5/8] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 25a7748..aea4cfe 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,2 @@ -# CarryOn -Carry On mod for Minecraft -Download here: https://minecraft.curseforge.com/projects/carry-on +# Carry On [![](http://cf.way2muchnoise.eu/carry-on.svg)](https://minecraft.curseforge.com/projects/carry-on) [![](http://cf.way2muchnoise.eu/versions/carry-on.svg)](https://minecraft.curseforge.com/projects/carry-on) From e0e9e979ddee99b9bd73e53a0f34b2651411a5f9 Mon Sep 17 00:00:00 2001 From: Purplicious_Cow Date: Sat, 19 Aug 2017 19:30:21 +0200 Subject: [PATCH 6/8] Fixes Gui at night while carrying entities, arrows causing console spam, height of carried entity in first person, entity name --- .../client/event/RenderEntityEvents.java | 54 +++++++++---------- .../carryon/client/event/RenderEvents.java | 13 +++-- .../carryon/common/item/ItemEntity.java | 48 ++++++++++++++--- 3 files changed, 77 insertions(+), 38 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 8066f60..dbce987 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -2,9 +2,12 @@ package tschipp.carryon.client.event; import java.lang.reflect.Field; +import org.lwjgl.opengl.GL11; + import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.model.ModelRenderer; @@ -116,6 +119,8 @@ public class RenderEntityEvents @SubscribeEvent public void renderHand(RenderHandEvent event) { + + World world = Minecraft.getMinecraft().world; EntityPlayer player = Minecraft.getMinecraft().player; AbstractClientPlayer aplayer = (AbstractClientPlayer) player; @@ -123,6 +128,7 @@ public class RenderEntityEvents int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; float partialticks = event.getPartialTicks(); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) { BlockPos pos = player.getPosition(); @@ -143,24 +149,28 @@ public class RenderEntityEvents float multiplier = height * width; GlStateManager.pushMatrix(); - GlStateManager.scale(1, 1, 1); + GlStateManager.scale(.8, .8, .8); GlStateManager.rotate(180, 0, 1, 0); - GlStateManager.translate(0.0, -height, width + 0.1); + GlStateManager.translate(0.0, -height - .1, width + 0.1); GlStateManager.enableAlpha(); - - if (perspective == 0) + + + if (perspective == 0 && Minecraft.getMinecraft().inGameHasFocus) { Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + } GlStateManager.disableAlpha(); + GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); if (perspective == 0) event.setCanceled(true); + } } @@ -229,17 +239,8 @@ public class RenderEntityEvents } - public void renderEntityStatic(Entity entityIn, float partialTicks, boolean p_188388_3_) + public void renderEntityStaticCO(Entity entityIn, float partialTicks, boolean p_188388_3_) { - Field fieldX = RenderManager.class.getDeclaredFields()[4]; - Field fieldY = RenderManager.class.getDeclaredFields()[5]; - Field fieldZ = RenderManager.class.getDeclaredFields()[6]; - fieldX.setAccessible(true); - fieldY.setAccessible(true); - fieldZ.setAccessible(true); - - RenderManager manager = Minecraft.getMinecraft().getRenderManager(); - if (entityIn.ticksExisted == 0) { entityIn.lastTickPosX = entityIn.posX; @@ -247,12 +248,17 @@ public class RenderEntityEvents entityIn.lastTickPosZ = entityIn.posZ; } - double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks; - double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks; - double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks; + double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; + double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; + double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; float f = entityIn.prevRotationYaw + (entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks; - int i = entityIn.getBrightnessForRender(partialTicks); + int i = 0; + if (!Minecraft.getMinecraft().world.isDaytime()) { + i = entityIn.getBrightnessForRender(partialTicks); + } else { + i = 50000; + } if (entityIn.isBurning()) { i = 15728880; @@ -260,16 +266,10 @@ public class RenderEntityEvents int j = i % 65536; int k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - try - { - manager.doRenderEntity(entityIn, d0 - fieldX.getDouble(manager), d1 - fieldY.getDouble(manager), d2 - fieldZ.getDouble(manager), f, partialTicks, p_188388_3_); - } - catch (IllegalArgumentException | IllegalAccessException e) - { - e.printStackTrace(); - } + RenderManager manager = Minecraft.getMinecraft().getRenderManager(); + manager.doRenderEntity(entityIn, d0, d1, d2, f, partialTicks, p_188388_3_); } } diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index ad75da8..7673ece 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -1,6 +1,8 @@ package tschipp.carryon.client.event; import java.lang.reflect.Field; +import java.util.Iterator; +import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -280,16 +282,20 @@ public class RenderEvents ItemStack stack = player.getHeldItemMainhand(); ModelPlayer model = event.getRenderer().getMainModel(); EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - + ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); - + + player.setArrowCountInEntity(0); //TODO Temporary Fix + if (!stack.isEmpty() && (stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) || (stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))) { - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) { model.bipedBody.childModels.clear(); + } Item item = stack.getItem(); @@ -354,6 +360,7 @@ public class RenderEvents { model.bipedLeftArm.isHidden = false; model.bipedRightArm.isHidden = false; + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) { model.bipedBody.childModels.clear(); diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java index c7a3649..0870cb8 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemEntity.java +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -42,7 +42,25 @@ public class ItemEntity extends Item { if (hasEntityData(stack)) { - return I18n.translateToLocal(EntityList.getTranslationName(new ResourceLocation(getEntityName(stack)))); + + /* + ResourceLocation key = new ResourceLocation(getEntityName(stack)); + + String name = I18n.translateToLocal(EntityList.getClass(key).getCanonicalName()); + + System.out.println(EntityList.getClass(key).getCanonicalName()); + System.out.println(EntityList.getClass(key).getSimpleName()); + System.out.println(EntityList.getClass(key).getName()); + + + + //I18n.translateToLocal(entity.getDisplayName().getFormattedText()) + + //return name; + */ + + return I18n.translateToLocal("entity."+EntityList.getTranslationName(new ResourceLocation(getEntityName(stack))) + ".name"); + //return getCustomName(stack); } return ""; @@ -90,7 +108,7 @@ public class ItemEntity extends Item if (hasEntityData(stack)) { BlockPos finalPos = pos; - + if (!block.isReplaceable(world, pos)) { finalPos = pos.offset(facing); @@ -116,7 +134,7 @@ public class ItemEntity extends Item return EnumActionResult.FAIL; } - + @Override public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { @@ -124,15 +142,15 @@ public class ItemEntity extends Item { if(getEntity(stack, world) == null) stack = ItemStack.EMPTY; - + if (entity instanceof EntityLivingBase) { if(entity instanceof EntityPlayer && CarryOnConfig.settings.slownessInCreative ? false : ((EntityPlayer)entity).isCreative()) return; - + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 1, potionLevel(stack, world), false, false)); } - + } else { @@ -184,13 +202,27 @@ public class ItemEntity extends Item } return null; } - + + public static String getCustomName(ItemStack stack) + { + if (stack.hasTagCompound()) + { + NBTTagCompound tag = stack.getTagCompound(); + if (tag.hasKey("CustomName") && !tag.getString("CustomName").isEmpty()) { + return tag.toString(); + } else { + return tag.toString(); + } + } + return null; + } + private int potionLevel(ItemStack stack, World world) { Entity e = getEntity(stack, world); if(e == null) return 1; - + int i = (int) (e.height * e.width); if (i > 4) i = 4; From ec60f185e8ae0a791c44266a97deb0bdc1af6ee4 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Sat, 19 Aug 2017 23:19:24 +0200 Subject: [PATCH 7/8] Custom Pickup Overrides, FTBUtils Integration --- build.gradle | 23 ++++ src/main/java/tschipp/carryon/CarryOn.java | 2 +- .../client/event/RenderEntityEvents.java | 1 + .../carryon/client/event/RenderEvents.java | 2 + .../carryon/common/config/CarryOnConfig.java | 12 +- .../carryon/common/config/Configs.java | 48 ++++--- .../common/event/ItemEntityEvents.java | 36 ++--- .../carryon/common/event/ItemEvents.java | 42 +++--- .../handler/CustomPickupOverrideHandler.java | 125 ++++++++++++++++++ .../common/handler/ForbiddenTileHandler.java | 10 +- .../carryon/common/handler/PickupHandler.java | 112 ++++++++++++++++ .../common/handler/RegistrationHandler.java | 2 + .../carryon/common/item/ItemEntity.java | 2 +- .../tschipp/carryon/common/item/ItemTile.java | 3 - .../resources/assets/carryon/lang/en_US.lang | 10 +- src/main/resources/mcmod.info | 4 +- 16 files changed, 352 insertions(+), 82 deletions(-) create mode 100644 src/main/java/tschipp/carryon/common/handler/CustomPickupOverrideHandler.java create mode 100644 src/main/java/tschipp/carryon/common/handler/PickupHandler.java diff --git a/build.gradle b/build.gradle index f6dccee..0dc116a 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,16 @@ buildscript { repositories { jcenter() maven { url = "http://files.minecraftforge.net/maven" } + } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT' } } + + + + apply plugin: 'net.minecraftforge.gradle.forge' version = "1.0" @@ -26,8 +31,26 @@ minecraft { // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. } +repositories { + + maven { url 'http://maven.epoxide.org' } + + ivy { + name "LatMod" + artifactPattern "http://mods.latmod.com/[module]/[revision]/[module]-[revision](-[classifier]).[ext]" + } +} + + + dependencies { + deobfCompile "net.darkhax.gamestages:GameStages-1.11.2:1.0.11" + + deobfCompile "LatMod:FTBUtilities:1.1x-3.6.5" + deobfCompile "LatMod:FTBLib:1.1x-3.6.5" + + } processResources { diff --git a/src/main/java/tschipp/carryon/CarryOn.java b/src/main/java/tschipp/carryon/CarryOn.java index 3fdd2eb..ff43e7f 100644 --- a/src/main/java/tschipp/carryon/CarryOn.java +++ b/src/main/java/tschipp/carryon/CarryOn.java @@ -26,7 +26,7 @@ public class CarryOn { public static CarryOn instance; public static final String MODID = "carryon"; - public static final String VERSION = "1.1.1"; + public static final String VERSION = "1.2"; public static final String NAME = "Carry On"; public static final String UPDATE_JSON = "https://gist.githubusercontent.com/Tschipp/dccadee7c90d7a34e6e76a35d9d6fa2e/raw/bf7fb60d5e59f73eee65b271d5c01585e26a0352/update.json"; public static final Logger LOGGER = LogManager.getFormatterLogger("CarryOn"); diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 8066f60..379d2b3 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -224,6 +224,7 @@ public class RenderEntityEvents GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); + } } diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index ad75da8..7231d36 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -273,6 +273,7 @@ public class RenderEvents @SubscribeEvent public void onPlayerRenderPre(RenderPlayerEvent.Pre event) { + if (!Loader.isModLoaded("mobends")) { EntityPlayer player = event.getEntityPlayer(); @@ -366,6 +367,7 @@ public class RenderEvents model.bipedRightArm.isHidden = false; } } + } diff --git a/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java b/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java index a52a3ba..2321acb 100644 --- a/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java +++ b/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java @@ -24,18 +24,16 @@ public class CarryOnConfig { public static Configs.Settings settings = new Configs.Settings(); @Config.LangKey(CarryOn.MODID) - @Config.Comment("Tile Entities that the Player is not allowed to pick up") - public static Configs.ForbiddenTiles forbiddenTiles = new Configs.ForbiddenTiles(); - - @Config.LangKey(CarryOn.MODID) - @Config.Comment("Entities that the Player is not allowed to pick up") - public static Configs.ForbiddenEntities forbiddenEntities = new Configs.ForbiddenEntities(); + @Config.Comment("Blacklist for Blocks and Entities") + public static Configs.Blacklist blacklist = new Configs.Blacklist(); @Config.LangKey(CarryOn.MODID) @Config.Comment("Model Overrides based on NBT or on Meta. Advanced Users Only!") public static Configs.ModelOverrides modelOverrides = new Configs.ModelOverrides(); - + @Config.LangKey(CarryOn.MODID) + @Config.Comment("Custom Pickup Conditions for certain blocks. ONLY WORKS WHEN GAMESTAGES IS INSTALLED! Advanced Users Only!") + public static Configs.CustomPickupConditions customPickupConditions = new Configs.CustomPickupConditions(); @Mod.EventBusSubscriber public static class EventHandler { diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index f4e94cf..7060ce1 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -38,22 +38,7 @@ public class Configs { public boolean heavyEntities = true; } - public static class ForbiddenEntities - { - - @Config.RequiresMcRestart() - @Comment("Entities that cannot be picked up") - public String[] forbiddenEntities = new String[] - { - "minecraft:ender_crystal", - "minecraft:ender_dragon", - "minecraft:ghast", - "minecraft:shulker" - }; - } - - - public static class ForbiddenTiles + public static class Blacklist { @Config.RequiresMcRestart() @Comment("Tile Entities that cannot be picked up") @@ -93,6 +78,17 @@ public class Configs { "embers:inferno_forge", "storagedrawers:framingtable", }; + + @Config.RequiresMcRestart() + @Comment("Entities that cannot be picked up") + public String[] forbiddenEntities = new String[] + { + "minecraft:ender_crystal", + "minecraft:ender_dragon", + "minecraft:ghast", + "minecraft:shulker", + "animania:textures/entity/pigs/hamster_tarou.png" + }; } public static class ModelOverrides @@ -112,6 +108,7 @@ public class Configs { "minecraft:tallgrass;1->(item)minecraft:tallgrass;1", "minecraft:tallgrass;2->(item)minecraft:tallgrass;2", "minecraft:flower_pot->(block)minecraft:flower_pot", + "minecraft:leaves2->(item)minecraft:leaves2", "quark:custom_chest{type:\"spruce\"}->quark:custom_chest;0", "quark:custom_chest{type:\"birch\"}->quark:custom_chest;1", "quark:custom_chest{type:\"jungle\"}->quark:custom_chest;2", @@ -149,5 +146,24 @@ public class Configs { "storagedrawers:basicdrawers;4{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;4{material:\"dark_oak\"}" }; } + + + + public static class CustomPickupConditions + { + @Config.RequiresMcRestart() + @Comment("Custom Pickup Conditions for Blocks") + public String[] customPickupConditionsBlocks = new String[] + { + + }; + + @Config.RequiresMcRestart() + @Comment("Custom Pickup Conditions for Entities") + public String[] customPickupConditionsEntities = new String[] + { + + }; + } } diff --git a/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java b/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java index 5058191..f895922 100644 --- a/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java +++ b/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java @@ -1,10 +1,9 @@ package tschipp.carryon.common.event; import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.passive.EntityTameable; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; @@ -15,8 +14,7 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import tschipp.carryon.common.config.CarryOnConfig; -import tschipp.carryon.common.handler.ForbiddenTileHandler; +import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemEntity; @@ -58,42 +56,36 @@ public class ItemEntityEvents } } - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.NORMAL) public void onEntityRightClick(PlayerInteractEvent.EntityInteract event) { EntityPlayer player = event.getEntityPlayer(); - ItemStack main = player.getHeldItemMainhand(); - ItemStack off = player.getHeldItemOffhand(); - World world = event.getWorld(); - Entity entity = event.getTarget(); - BlockPos pos = entity.getPosition(); - if (main.isEmpty() && off.isEmpty() && player.isSneaking()) + if (player instanceof EntityPlayerMP) { - ItemStack stack = new ItemStack(RegistrationHandler.itemEntity); + ItemStack main = player.getHeldItemMainhand(); + ItemStack off = player.getHeldItemOffhand(); + World world = event.getWorld(); + Entity entity = event.getTarget(); + BlockPos pos = entity.getPosition(); - if (!(entity instanceof EntityPlayer) && !ForbiddenTileHandler.isForbidden(entity) && (CarryOnConfig.settings.pickupHostileMobs ? true : !entity.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative()) && (entity.height <= CarryOnConfig.settings.maxEntityHeight && entity.width <= CarryOnConfig.settings.maxEntityWidth || player.isCreative())) + if (main.isEmpty() && off.isEmpty() && player.isSneaking()) { - double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + ItemStack stack = new ItemStack(RegistrationHandler.itemEntity); - if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + if (PickupHandler.canPlayerPickUpEntity(player, entity)) { - if (entity instanceof EntityTameable) - { - EntityTameable tame = (EntityTameable) entity; - if (tame.getOwnerId() != null && tame.getOwnerId() != player.getUUID(player.getGameProfile())) - return; - } if (ItemEntity.storeEntityData(entity, world, stack)) { entity.setDead(); player.setHeldItem(EnumHand.MAIN_HAND, stack); + event.setCanceled(true); } } } - } + } } diff --git a/src/main/java/tschipp/carryon/common/event/ItemEvents.java b/src/main/java/tschipp/carryon/common/event/ItemEvents.java index af3e826..db1c562 100644 --- a/src/main/java/tschipp/carryon/common/event/ItemEvents.java +++ b/src/main/java/tschipp/carryon/common/event/ItemEvents.java @@ -5,6 +5,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -20,6 +21,7 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.handler.ForbiddenTileHandler; +import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemTile; @@ -79,38 +81,36 @@ public class ItemEvents public void onBlockRightClick(PlayerInteractEvent.RightClickBlock event) { EntityPlayer player = event.getEntityPlayer(); - ItemStack main = player.getHeldItemMainhand(); - ItemStack off = player.getHeldItemOffhand(); - World world = event.getWorld(); - BlockPos pos = event.getPos(); - Block block = world.getBlockState(pos).getBlock(); - IBlockState state = world.getBlockState(pos); - if (main.isEmpty() && off.isEmpty() && player.isSneaking() && !ForbiddenTileHandler.isForbidden(block)) + if (player instanceof EntityPlayerMP) { - ItemStack stack = new ItemStack(RegistrationHandler.itemTile); - TileEntity te = world.getTileEntity(pos); - if ((CarryOnConfig.settings.pickupAllBlocks ? true : te != null) && (block.getBlockHardness(state, world, pos) != -1 || player.isCreative())) + ItemStack main = player.getHeldItemMainhand(); + ItemStack off = player.getHeldItemOffhand(); + World world = event.getWorld(); + BlockPos pos = event.getPos(); + Block block = world.getBlockState(pos).getBlock(); + IBlockState state = world.getBlockState(pos); + + if (main.isEmpty() && off.isEmpty() && player.isSneaking() && !ForbiddenTileHandler.isForbidden(block)) { - double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + ItemStack stack = new ItemStack(RegistrationHandler.itemTile); - if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + TileEntity te = world.getTileEntity(pos); + if (PickupHandler.canPlayerPickUpBlock(player, te, world, pos)) { - if (!ItemTile.isLocked(pos, world)) + if (ItemTile.storeTileData(te, world, pos, state.getActualState(world, pos), stack)) { - if (ItemTile.storeTileData(te, world, pos, state.getActualState(world, pos), stack)) - { - world.removeTileEntity(pos); - world.setBlockToAir(pos); - player.setHeldItem(EnumHand.MAIN_HAND, stack); - event.setUseBlock(Result.DENY); - } + world.removeTileEntity(pos); + world.setBlockToAir(pos); + player.setHeldItem(EnumHand.MAIN_HAND, stack); + event.setUseBlock(Result.DENY); + event.setCanceled(true); } + } } - } } diff --git a/src/main/java/tschipp/carryon/common/handler/CustomPickupOverrideHandler.java b/src/main/java/tschipp/carryon/common/handler/CustomPickupOverrideHandler.java new file mode 100644 index 0000000..38ce4ac --- /dev/null +++ b/src/main/java/tschipp/carryon/common/handler/CustomPickupOverrideHandler.java @@ -0,0 +1,125 @@ +package tschipp.carryon.common.handler; + +import java.util.HashMap; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraftforge.fml.common.Loader; +import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.helper.InvalidConfigException; + +public class CustomPickupOverrideHandler +{ + + public static HashMap PICKUP_CONDITIONS = new HashMap(); + public static HashMap PICKUP_CONDITIONS_ENTITIES = new HashMap(); + + public static void initPickupOverrides() + { + if (Loader.isModLoaded("gamestages")) + { + + String[] conditions = CarryOnConfig.customPickupConditions.customPickupConditionsBlocks; + + for (int i = 0; i < conditions.length; i++) + { + String line = conditions[i]; + + if (!line.contains("(") || !line.contains(")")) + new InvalidConfigException("Invalid Condition at line " + i + ": " + line).printException(); + + String condition = line.substring(line.indexOf("(")); + String blockname = line.replace(condition, ""); + condition = condition.replace("(", ""); + condition = condition.replace(")", ""); + + if (blockname.contains("*")) + { + String modid = blockname.replace("*", ""); + for (int k = 0; k < Block.REGISTRY.getKeys().size(); k++) + { + if (Block.REGISTRY.getKeys().toArray()[k].toString().contains(modid)) + { + PICKUP_CONDITIONS.put(Block.REGISTRY.getKeys().toArray()[k].toString() + ";any", condition); + } + } + } + else + { + if (!blockname.contains(";")) + blockname = blockname + ";any"; + + PICKUP_CONDITIONS.put(blockname, condition); + } + } + + String[] entityConditions = CarryOnConfig.customPickupConditions.customPickupConditionsEntities; + + for (int i = 0; i < entityConditions.length; i++) + { + String line = entityConditions[i]; + + if (!line.contains("(") || !line.contains(")")) + new InvalidConfigException("Invalid Condition at line " + i + ": " + line).printException(); + + String condition = line.substring(line.indexOf("(")); + String entityname = line.replace(condition, ""); + condition = condition.replace("(", ""); + condition = condition.replace(")", ""); + + PICKUP_CONDITIONS_ENTITIES.put(entityname, condition); + + } + } + } + + public static boolean hasSpecialPickupConditions(IBlockState state) + { + if (!Loader.isModLoaded("gamestages")) + return false; + + String block = state.getBlock().getRegistryName().toString(); + String meta = "" + state.getBlock().getMetaFromState(state); + + boolean absolute = PICKUP_CONDITIONS.containsKey(block + ";" + meta); + boolean any = PICKUP_CONDITIONS.containsKey(block + ";any"); + + return absolute || any; + } + + public static String getPickupCondition(IBlockState state) + { + String block = state.getBlock().getRegistryName().toString(); + String meta = "" + state.getBlock().getMetaFromState(state); + + String absolute = PICKUP_CONDITIONS.get(block + ";" + meta); + String any = PICKUP_CONDITIONS.get(block + ";any"); + + if (absolute != null) + return absolute; + else + return any; + } + + public static boolean hasSpecialPickupConditions(Entity entity) + { + if (!Loader.isModLoaded("gamestages")) + return false; + + String entityname = EntityList.getKey(entity).toString(); + boolean condition = PICKUP_CONDITIONS_ENTITIES.containsKey(entityname); + + return condition; + } + + public static String getPickupCondition(Entity entity) + { + String entityname = EntityList.getKey(entity).toString(); + String condition = PICKUP_CONDITIONS_ENTITIES.get(entityname); + + return condition; + } + +} diff --git a/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java b/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java index d118e7a..9ba0fe3 100644 --- a/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java @@ -11,8 +11,8 @@ import tschipp.carryon.common.config.CarryOnConfig; public class ForbiddenTileHandler { - public static final List FORBIDDEN_TILES; - public static final List FORBIDDEN_ENTITIES; + public static List FORBIDDEN_TILES; + public static List FORBIDDEN_ENTITIES; public static boolean isForbidden(Block block) { @@ -30,9 +30,9 @@ public class ForbiddenTileHandler return true; } - static + public static void initForbiddenTiles() { - String[] forbidden = CarryOnConfig.forbiddenTiles.forbiddenTiles; + String[] forbidden = CarryOnConfig.blacklist.forbiddenTiles; FORBIDDEN_TILES = new ArrayList(); for (int i = 0; i < forbidden.length; i++) @@ -51,7 +51,7 @@ public class ForbiddenTileHandler FORBIDDEN_TILES.add(forbidden[i]); } - String[] forbiddenEntity = CarryOnConfig.forbiddenEntities.forbiddenEntities; + String[] forbiddenEntity = CarryOnConfig.blacklist.forbiddenEntities; FORBIDDEN_ENTITIES = new ArrayList(); for (int i = 0; i < forbiddenEntity.length; i++) diff --git a/src/main/java/tschipp/carryon/common/handler/PickupHandler.java b/src/main/java/tschipp/carryon/common/handler/PickupHandler.java new file mode 100644 index 0000000..10bef35 --- /dev/null +++ b/src/main/java/tschipp/carryon/common/handler/PickupHandler.java @@ -0,0 +1,112 @@ +package tschipp.carryon.common.handler; + +import javax.annotation.Nullable; + +import com.feed_the_beast.ftbl.lib.math.BlockPosContainer; +import com.feed_the_beast.ftbu.FTBUPermissions; +import com.feed_the_beast.ftbu.api.chunks.BlockInteractionType; +import com.feed_the_beast.ftbu.api_impl.ClaimedChunkStorage; + +import net.darkhax.gamestages.capabilities.PlayerDataHandler; +import net.darkhax.gamestages.capabilities.PlayerDataHandler.IStageData; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Container; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Loader; +import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.item.ItemTile; + +public class PickupHandler +{ + + public static boolean canPlayerPickUpBlock(EntityPlayer player, @Nullable TileEntity tile, World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + + player.closeScreen(); + + if ((block.getBlockHardness(state, world, pos) != -1 || player.isCreative())) + { + double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + + if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + { + if (!ItemTile.isLocked(pos, world)) + { + if (CustomPickupOverrideHandler.hasSpecialPickupConditions(state)) + { + IStageData stageData = PlayerDataHandler.getStageData(player); + String condition = CustomPickupOverrideHandler.getPickupCondition(state); + if (stageData.hasUnlockedStage(condition)) + return true && handleFTBUtils((EntityPlayerMP) player, world, pos, state); + + } + else if (CarryOnConfig.settings.pickupAllBlocks ? true : tile != null) + { + return true && handleFTBUtils((EntityPlayerMP) player, world, pos, state); + } + + } + } + } + + return false; + } + + public static boolean canPlayerPickUpEntity(EntityPlayer player, Entity toPickUp) + { + BlockPos pos = toPickUp.getPosition(); + if (!(toPickUp instanceof EntityPlayer) && !ForbiddenTileHandler.isForbidden(toPickUp)) + { + if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) + { + if ((toPickUp.height <= CarryOnConfig.settings.maxEntityHeight && toPickUp.width <= CarryOnConfig.settings.maxEntityWidth || player.isCreative())) + { + double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + { + if (toPickUp instanceof EntityTameable) + { + EntityTameable tame = (EntityTameable) toPickUp; + if (tame.getOwnerId() != null && tame.getOwnerId() != player.getUUID(player.getGameProfile())) + return false; + } + + if (CustomPickupOverrideHandler.hasSpecialPickupConditions(toPickUp)) + { + IStageData stageData = PlayerDataHandler.getStageData(player); + String condition = CustomPickupOverrideHandler.getPickupCondition(toPickUp); + if (stageData.hasUnlockedStage(condition)) + return true; + } + else + return true; + } + } + } + + } + return false; + } + + private static boolean handleFTBUtils(EntityPlayerMP player, World world, BlockPos pos, IBlockState state) + { + if (Loader.isModLoaded("ftbu")) + { + BlockPosContainer container = new BlockPosContainer(world, pos, state); + return ClaimedChunkStorage.INSTANCE.canPlayerInteract((EntityPlayerMP) player, EnumHand.MAIN_HAND, container, BlockInteractionType.CNB_BREAK); + } + return true; + } + +} diff --git a/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java b/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java index 987fe49..1d2b775 100644 --- a/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java @@ -44,6 +44,8 @@ public class RegistrationHandler public static void regOverrideList() { ModelOverridesHandler.initOverrides(); + CustomPickupOverrideHandler.initPickupOverrides(); + ForbiddenTileHandler.initForbiddenTiles(); } diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java index c7a3649..089c620 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemEntity.java +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -191,7 +191,7 @@ public class ItemEntity extends Item if(e == null) return 1; - int i = (int) (e.height * e.width); + int i = (int) (e.height * e.width) / 300; if (i > 4) i = 4; diff --git a/src/main/java/tschipp/carryon/common/item/ItemTile.java b/src/main/java/tschipp/carryon/common/item/ItemTile.java index c2827ed..b8c1552 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemTile.java +++ b/src/main/java/tschipp/carryon/common/item/ItemTile.java @@ -177,9 +177,6 @@ public class ItemTile extends Item public static boolean storeTileData(@Nullable TileEntity tile, World world, BlockPos pos, IBlockState state, ItemStack stack) { - if (CarryOnConfig.settings.pickupAllBlocks ? false : tile == null) - return false; - if (stack.isEmpty()) return false; diff --git a/src/main/resources/assets/carryon/lang/en_US.lang b/src/main/resources/assets/carryon/lang/en_US.lang index 88ef6f8..d0c67fb 100644 --- a/src/main/resources/assets/carryon/lang/en_US.lang +++ b/src/main/resources/assets/carryon/lang/en_US.lang @@ -1,8 +1,10 @@ carryon.category.settings=Settings -carryon.category.forbiddentiles=Forbidden Tile Entities +carryon.category.blacklist=Blacklist carryon.category.modeloverrides=Model Overrides (Advanced) -carryon.category.forbiddenentities=Forbidden Entities +carryon.category.custompickupconditions=Custom Pickup Conditions (Advanced) carryon.general.modeloverrides.modeloverrides=Model Overrides -carryon.general.forbiddenentities.forbiddenentities=Entities that the Player cannot pick up -carryon.general.forbiddentiles.forbiddentiles=Blocks that the Player cannot pick up \ No newline at end of file +carryon.general.blacklist.forbiddenentities=Entities that the Player cannot pick up +carryon.general.blacklist.forbiddentiles=Blocks that the Player cannot pick up +carryon.category.custompickupconditions.custompickupconditionsblocks=Custom Block Pickup Conditions +carryon.category.custompickupconditions.custompickupconditionsentities=Custom Entity Pickup Conditions diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 17ecd70..a373207 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -2,13 +2,13 @@ { "modid" : "carryon", "name" : "Carry On", - "version" : "1.1.1", "mcversion" : "1.11.2", + "version" : "1.2", "mcversion" : "1.11.2", "url" : "", "credits" : "Tschipp, Purplicious_Cow, cy4n", "authorList" : ["Tschipp, Purplicious_Cow, cy4n"], "description": "Carry On is a simple mod that improves game interaction by allowing players to pick up, carry, and place single block Tile Entities using only their empty hands.", "logoFile" : "assets/carryon/logo.png", - "updateUrl" : "", + "updateUrl" : "https://gist.githubusercontent.com/Tschipp/dccadee7c90d7a34e6e76a35d9d6fa2e/raw/5115328bf7c35d5c5cea64bdb58becd2ca17fcac/update.json", "parent" : "", "dependencies": [], "screenshots": [] From 8848759b30b76e5df085f79abd3b1ce83e12e7a3 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Sat, 19 Aug 2017 23:34:02 +0200 Subject: [PATCH 8/8] Entity Names --- .../carryon/common/item/ItemEntity.java | 22 ++----------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java index 74cad10..43dbb79 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemEntity.java +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -41,26 +41,8 @@ public class ItemEntity extends Item public String getItemStackDisplayName(ItemStack stack) { if (hasEntityData(stack)) - { - - /* - ResourceLocation key = new ResourceLocation(getEntityName(stack)); - - String name = I18n.translateToLocal(EntityList.getClass(key).getCanonicalName()); - - System.out.println(EntityList.getClass(key).getCanonicalName()); - System.out.println(EntityList.getClass(key).getSimpleName()); - System.out.println(EntityList.getClass(key).getName()); - - - - //I18n.translateToLocal(entity.getDisplayName().getFormattedText()) - - //return name; - */ - + { return I18n.translateToLocal("entity."+EntityList.getTranslationName(new ResourceLocation(getEntityName(stack))) + ".name"); - //return getCustomName(stack); } return ""; @@ -223,7 +205,7 @@ public class ItemEntity extends Item if(e == null) return 1; - int i = (int) (e.height * e.width) / 300; + int i = (int)(e.height * e.width); if (i > 4) i = 4;