diff --git a/src/main/java/tschipp/carryon/CarryOn.java b/src/main/java/tschipp/carryon/CarryOn.java index f4289f5..c072a5a 100644 --- a/src/main/java/tschipp/carryon/CarryOn.java +++ b/src/main/java/tschipp/carryon/CarryOn.java @@ -29,7 +29,7 @@ public class CarryOn { public static CarryOn instance; public static final String MODID = "carryon"; - public static final String VERSION = "1.4.1"; + public static final String VERSION = "1.5"; public static final String NAME = "Carry On"; public static final String UPDATE_JSON = "https://gist.githubusercontent.com/Tschipp/dccadee7c90d7a34e6e76a35d9d6fa2e/raw/"; 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 a215ba2..3d007ab 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -200,7 +200,8 @@ public class RenderEntityEvents { Entity entity = ItemEntity.getEntity(stack, world); - float rotation = -player.renderYawOffset; + float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; if (entity != null) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 106cd9d..4ed71ce 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -251,11 +251,7 @@ public class RenderEvents ItemStack tileItem = ItemTile.getItemStack(stack); - EntityItem entityItem = new EntityItem(Minecraft.getMinecraft().theWorld, 0, 0, 0); - entityItem.hoverStart = 0; - - entityItem.setEntityItemStack(tileItem); - float rotation = -player.renderYawOffset; + float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; diff --git a/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java b/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java index 4099524..684c513 100644 --- a/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java +++ b/src/main/java/tschipp/carryon/common/config/CarryOnConfig.java @@ -27,6 +27,10 @@ public class CarryOnConfig { @Config.Comment("Blacklist for Blocks and Entities") public static Configs.Blacklist blacklist = new Configs.Blacklist(); + @Config.LangKey(CarryOn.MODID) + @Config.Comment("Whitelist for Blocks and Entities (useWhitelist must be true!)") + public static Configs.WhiteList whitelist = new Configs.WhiteList(); + @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(); diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index 7d57fca..41e085c 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -45,6 +45,28 @@ public class Configs { @Comment("Arms should render on sides when carrying") public boolean renderArms = true; + + @Comment("Allow babies to be carried even when adult mob is blacklisted (or not whitelisted)") + public boolean allowBabies = false; + + @Comment("Use Whitelist instead of Blacklist for Blocks") + public boolean useWhitelistBlocks=false; + + @Comment("Use Whitelist instead of Blacklist for Entities") + public boolean useWhitelistEntities=false; + } + + public static class WhiteList + { + @Comment("Entities that CAN be picked up") + public String[] allowedEntities=new String[] + { + }; + + @Comment("Blocks that CAN be picked up") + public String[] allowedBlocks=new String[] + { + }; } public static class Blacklist @@ -97,6 +119,9 @@ public class Configs { "Ghast", "Shulker", "animania:textures/entity/pigs/hamster_tarou.png", + "animania:hamster", + "animania:ferret*", + "animania:hedgehog*", "mynko:*" }; } @@ -153,7 +178,20 @@ public class Configs { "storagedrawers:basicdrawers;4{Mat:\"birch\"}->storagedrawers:basicdrawers;4{material:\"birch\"}", "storagedrawers:basicdrawers;4{Mat:\"jungle\"}->storagedrawers:basicdrawers;4{material:\"jungle\"}", "storagedrawers:basicdrawers;4{Mat:\"acacia\"}->storagedrawers:basicdrawers;4{material:\"acacia\"}", - "storagedrawers:basicdrawers;4{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;4{material:\"dark_oak\"}" + "storagedrawers:basicdrawers;4{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;4{material:\"dark_oak\"}", + "animania:nest->(block)animania:nest", + "animania:cheese_mold;0->(block)cheese_mold;0", + "animania:cheese_mold;1->(block)cheese_mold;1", + "animania:cheese_mold;2->(block)cheese_mold;2", + "animania:cheese_mold;3->(block)cheese_mold;3", + "animania:cheese_mold;4->(block)cheese_mold;4", + "animania:cheese_mold;5->(block)cheese_mold;5", + "animania:cheese_mold;6->(block)cheese_mold;6", + "animania:cheese_mold;7->(block)cheese_mold;7", + "animania:cheese_mold;8->(block)cheese_mold;8", + "animania:cheese_mold;9->(block)cheese_mold;9", + "animania:cheese_mold;10->(block)cheese_mold;10", + }; } diff --git a/src/main/java/tschipp/carryon/common/event/ItemEvents.java b/src/main/java/tschipp/carryon/common/event/ItemEvents.java index 2d7f5a3..b263446 100644 --- a/src/main/java/tschipp/carryon/common/event/ItemEvents.java +++ b/src/main/java/tschipp/carryon/common/event/ItemEvents.java @@ -25,7 +25,7 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import tschipp.carryon.CarryOn; import tschipp.carryon.client.keybinds.CarryOnKeybinds; -import tschipp.carryon.common.handler.ForbiddenTileHandler; +import tschipp.carryon.common.handler.ListHandler; import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemTile; @@ -102,7 +102,7 @@ public class ItemEvents Block block = world.getBlockState(pos).getBlock(); IBlockState state = world.getBlockState(pos); - if (main == null && off == null && CarryOnKeybinds.isKeyPressed(player) && !ForbiddenTileHandler.isForbidden(block)) + if (main == null && off == null && CarryOnKeybinds.isKeyPressed(player)) { ItemStack stack = new ItemStack(RegistrationHandler.itemTile); diff --git a/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java b/src/main/java/tschipp/carryon/common/handler/ListHandler.java similarity index 55% rename from src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java rename to src/main/java/tschipp/carryon/common/handler/ListHandler.java index b5a1c04..0c39df6 100644 --- a/src/main/java/tschipp/carryon/common/handler/ForbiddenTileHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/ListHandler.java @@ -9,10 +9,12 @@ import net.minecraft.entity.EntityList; import net.minecraftforge.fml.common.registry.ForgeRegistries; import tschipp.carryon.common.config.CarryOnConfig; -public class ForbiddenTileHandler +public class ListHandler { public static List FORBIDDEN_TILES; public static List FORBIDDEN_ENTITIES; + public static List ALLOWED_ENTITIES; + public static List ALLOWED_TILES; public static boolean isForbidden(Block block) { @@ -30,6 +32,21 @@ public class ForbiddenTileHandler return true; } + public static boolean isAllowed(Entity entity){ + if (EntityList.getEntityString(entity) != null) + { + String name = EntityList.getEntityString(entity).toString(); + boolean contains = ALLOWED_ENTITIES.contains(name); + return contains; + } + return true; + } + + public static boolean isAllowed(Block block) + { + return ALLOWED_TILES.contains(block.getRegistryName().toString()); + } + public static void initForbiddenTiles() { String[] forbidden = CarryOnConfig.blacklist.forbiddenTiles; @@ -69,6 +86,42 @@ public class ForbiddenTileHandler } FORBIDDEN_ENTITIES.add(forbiddenEntity[i]); } + + String [] allowedEntities=CarryOnConfig.whitelist.allowedEntities; + ALLOWED_ENTITIES=new ArrayList(); + for(int i=0;i(); + + for (int i = 0; i < allowedBlocks.length; i++) + { + if (allowedBlocks[i].contains("*")) + { + String modid = allowedBlocks[i].replace("*", ""); + for (int k = 0; k < Block.REGISTRY.getKeys().size(); k++) + { + if (Block.REGISTRY.getKeys().toArray()[k].toString().contains(modid)) + { + ALLOWED_TILES.add(Block.REGISTRY.getKeys().toArray()[k].toString()); + } + } + } + ALLOWED_TILES.add(allowedBlocks[i]); + } } } diff --git a/src/main/java/tschipp/carryon/common/handler/PickupHandler.java b/src/main/java/tschipp/carryon/common/handler/PickupHandler.java index fa77ac3..ec3a15c 100644 --- a/src/main/java/tschipp/carryon/common/handler/PickupHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/PickupHandler.java @@ -8,8 +8,8 @@ import com.feed_the_beast.ftbu.api_impl.ClaimedChunkStorage; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.passive.EntityTameable; import net.minecraft.entity.player.EntityPlayer; @@ -32,6 +32,21 @@ public class PickupHandler player.closeScreen(); + if (CarryOnConfig.settings.useWhitelistBlocks) + { + if (!ListHandler.isAllowed(world.getBlockState(pos).getBlock())) + { + return false; + } + } + else + { + if (ListHandler.isForbidden(world.getBlockState(pos).getBlock())) + { + return false; + } + } + if ((block.getBlockHardness(state, world, pos) != -1 || player.isCreative())) { double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); @@ -55,7 +70,48 @@ public class PickupHandler public static boolean canPlayerPickUpEntity(EntityPlayer player, Entity toPickUp) { BlockPos pos = toPickUp.getPosition(); - if (!(toPickUp instanceof EntityPlayer) && !ForbiddenTileHandler.isForbidden(toPickUp)) + + if (toPickUp instanceof EntityPlayer) + return false; + + // check for allow babies to be picked up + if (toPickUp instanceof EntityAgeable && CarryOnConfig.settings.allowBabies) + { + EntityAgeable living = (EntityAgeable) toPickUp; + if (living.getGrowingAge() < 0 || living.isChild()) + { + + 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; + } + + return true; + } + } + } + + if (CarryOnConfig.settings.useWhitelistEntities) + { + if (!ListHandler.isAllowed(toPickUp)) + { + return false; + } + } + else + { + if (ListHandler.isForbidden(toPickUp)) + { + return false; + } + } + + if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) { if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) { @@ -77,6 +133,7 @@ public class PickupHandler } } + return false; } diff --git a/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java b/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java index 5123ad1..27aec43 100644 --- a/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/RegistrationHandler.java @@ -44,7 +44,7 @@ public class RegistrationHandler public static void regOverrideList() { ModelOverridesHandler.initOverrides(); - ForbiddenTileHandler.initForbiddenTiles(); + ListHandler.initForbiddenTiles(); } diff --git a/src/main/resources/assets/carryon/lang/en_US.lang b/src/main/resources/assets/carryon/lang/en_US.lang index 5811dbb..e854bf1 100644 --- a/src/main/resources/assets/carryon/lang/en_US.lang +++ b/src/main/resources/assets/carryon/lang/en_US.lang @@ -2,6 +2,7 @@ carryon.category.settings=Settings carryon.category.blacklist=Blacklist carryon.category.modeloverrides=Model Overrides (Advanced) carryon.category.custompickupconditions=Custom Pickup Conditions (Advanced) +carryon.category.whitelist=Whitelist carryon.general.modeloverrides.modeloverrides=Model Overrides carryon.general.blacklist.forbiddenentities=Entities that the Player cannot pick up diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index f27ffa9..1a62e9d 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -2,7 +2,7 @@ { "modid" : "carryon", "name" : "Carry On", - "version" : "1.4.1", "mcversion" : "1.10.2", + "version" : "1.5", "mcversion" : "1.10.2", "url" : "", "credits" : "Tschipp, Purplicious_Cow, cy4n", "authorList" : ["Tschipp, Purplicious_Cow, cy4n"],