Readded Obfuscate and Gamestage support, fixed several bugs

This commit is contained in:
Tschipp 2021-02-15 17:21:46 +01:00
parent 1ece990eb0
commit 3d4dab6619
23 changed files with 527 additions and 251 deletions

2
.gitignore vendored
View File

@ -23,3 +23,5 @@ run
# Files from Forge MDK # Files from Forge MDK
forge*changelog.txt forge*changelog.txt
libs/

View File

@ -92,12 +92,32 @@ repositories {
maven { maven {
url "https://maven.mcmoddev.com/" url "https://maven.mcmoddev.com/"
} }
flatDir {
dirs 'libs'
}
maven {
url "https://www.cursemaven.com"
}
} }
dependencies { dependencies {
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
//compileOnly fg.deobf("net.darkhax.gamestages:GameStages-1.16.1:3.1.8") implementation fg.deobf("net.darkhax.gamestages:GameStages-1.16.4:6.0.1")
implementation fg.deobf("net.darkhax.bookshelf:Bookshelf-1.16.4:9.3.18")
implementation fg.deobf("curse.maven:obfuscate-289380:3169370")
fileTree("libs").matching {
include "*.jar"
}.each {
String filename = it.getName();
filename = filename.substring(0, filename.length() - 4);
int lastDash = filename.lastIndexOf("-");
filename = filename.substring(0, lastDash) + ":" + filename.substring(lastDash+1, filename.length());
implementation fg.deobf("blank:${filename}")
}
} }

View File

@ -1,7 +1,7 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties. # Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process. # This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G org.gradle.jvmargs=-Xmx3G
version=1.15.1 version=1.15.2
minecraft_version=1.16.3 minecraft_version=1.16.5
mcp_mappings=20200916-1.16.2 mcp_mappings=20201028-1.16.3
forge_version=34.1.10 forge_version=36.0.22

View File

@ -1,6 +1,7 @@
package tschipp.carryon; package tschipp.carryon;
import java.io.File; import java.io.File;
import java.util.Optional;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -15,9 +16,9 @@ import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLFingerprintViolationEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.network.NetworkDirection;
import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.NetworkRegistry;
import net.minecraftforge.fml.network.simple.SimpleChannel; import net.minecraftforge.fml.network.simple.SimpleChannel;
import net.minecraftforge.forgespi.language.IModInfo; import net.minecraftforge.forgespi.language.IModInfo;
@ -68,11 +69,11 @@ public class CarryOn
CarryOn.network = NetworkRegistry.newSimpleChannel(new ResourceLocation(CarryOn.MODID, "carryonpackets"), () -> version, version::equals, version::equals); CarryOn.network = NetworkRegistry.newSimpleChannel(new ResourceLocation(CarryOn.MODID, "carryonpackets"), () -> version, version::equals, version::equals);
// CLIENT PACKETS // CLIENT PACKETS
CarryOn.network.registerMessage(0, CarrySlotPacket.class, CarrySlotPacket::toBytes, CarrySlotPacket::new, CarrySlotPacket::handle); CarryOn.network.registerMessage(0, CarrySlotPacket.class, CarrySlotPacket::toBytes, CarrySlotPacket::new, CarrySlotPacket::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
CarryOn.network.registerMessage(1, ScriptReloadPacket.class, ScriptReloadPacket::toBytes, ScriptReloadPacket::new, ScriptReloadPacket::handle); CarryOn.network.registerMessage(1, ScriptReloadPacket.class, ScriptReloadPacket::toBytes, ScriptReloadPacket::new, ScriptReloadPacket::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
// SERVER PACKETS // SERVER PACKETS
CarryOn.network.registerMessage(2, SyncKeybindPacket.class, SyncKeybindPacket::toBytes, SyncKeybindPacket::new, SyncKeybindPacket::handle); CarryOn.network.registerMessage(2, SyncKeybindPacket.class, SyncKeybindPacket::toBytes, SyncKeybindPacket::new, SyncKeybindPacket::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER));
RegistrationHandler.regCommonEvents(); RegistrationHandler.regCommonEvents();
@ -91,13 +92,4 @@ public class CarryOn
event.getRegistry().register(RegistrationHandler.itemEntity); event.getRegistry().register(RegistrationHandler.itemEntity);
event.getRegistry().register(RegistrationHandler.itemTile); event.getRegistry().register(RegistrationHandler.itemTile);
} }
@SubscribeEvent
public void onFingerprintViolation(FMLFingerprintViolationEvent event)
{
LOGGER.error("WARNING! Invalid fingerprint detected! The file " + event.getSource().getName() + " may have been tampered with! If you didn't download the file from https://minecraft.curseforge.com/projects/carry-on or through any kind of mod launcher, immediately delete the file and re-download it from https://minecraft.curseforge.com/projects/carry-on");
FINGERPRINT_VIOLATED = true;
}
} }

View File

@ -49,6 +49,7 @@ import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.client.event.ClientPlayerNetworkEvent.LoggedInEvent;
import net.minecraftforge.event.TickEvent.PlayerTickEvent; import net.minecraftforge.event.TickEvent.PlayerTickEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.EventPriority;
@ -59,6 +60,7 @@ import tschipp.carryon.CarryOn;
import tschipp.carryon.client.helper.CarryRenderHelper; import tschipp.carryon.client.helper.CarryRenderHelper;
import tschipp.carryon.client.keybinds.CarryOnKeybinds; import tschipp.carryon.client.keybinds.CarryOnKeybinds;
import tschipp.carryon.common.config.Configs.Settings; import tschipp.carryon.common.config.Configs.Settings;
import tschipp.carryon.common.handler.ListHandler;
import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.ModelOverridesHandler;
import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.helper.KeyboardCallbackWrapper.KeyPressedEvent; import tschipp.carryon.common.helper.KeyboardCallbackWrapper.KeyPressedEvent;
@ -297,6 +299,13 @@ public class RenderEvents
matrix.pop(); matrix.pop();
} }
} }
// @SubscribeEvent
// public void onJoinServer(LoggedInEvent event)
// {
// ListHandler.initConfigLists();
// }
/* /*
* Render blocks and entities in third person * Render blocks and entities in third person
@ -313,7 +322,7 @@ public class RenderEvents
int light = 0; int light = 0;
int perspective = CarryRenderHelper.getPerspective(); int perspective = CarryRenderHelper.getPerspective();
EntityRendererManager manager = Minecraft.getInstance().getRenderManager(); EntityRendererManager manager = Minecraft.getInstance().getRenderManager();
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.disableCull(); RenderSystem.disableCull();
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();

View File

@ -15,15 +15,12 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.fml.network.PacketDistributor; import net.minecraftforge.fml.network.PacketDistributor;
import tschipp.carryon.CarryOn; import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.Configs.Settings;
import tschipp.carryon.common.handler.CustomPickupOverrideHandler; import tschipp.carryon.common.handler.CustomPickupOverrideHandler;
import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.ModelOverridesHandler;
import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.item.ItemCarryonEntity;
import tschipp.carryon.common.item.ItemCarryonBlock; import tschipp.carryon.common.item.ItemCarryonBlock;
import tschipp.carryon.common.scripting.ScriptReader; import tschipp.carryon.common.item.ItemCarryonEntity;
import tschipp.carryon.network.client.CarrySlotPacket; import tschipp.carryon.network.client.CarrySlotPacket;
import tschipp.carryon.network.client.ScriptReloadPacket;
public class CommandCarryOn public class CommandCarryOn
{ {
@ -43,7 +40,7 @@ public class CommandCarryOn
return handleClear(cmd.getSource(), EntityArgument.getPlayers(cmd, "target")); return handleClear(cmd.getSource(), EntityArgument.getPlayers(cmd, "target"));
}))) })))
; ;
dispatcher.register(builder); dispatcher.register(builder);
@ -81,7 +78,8 @@ public class CommandCarryOn
CarryOn.LOGGER.info("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonBlock.getBlockState(main))); CarryOn.LOGGER.info("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonBlock.getBlockState(main)));
return 1; return 1;
} else if (!main.isEmpty() && main.getItem() == RegistrationHandler.itemEntity) }
else if (!main.isEmpty() && main.getItem() == RegistrationHandler.itemEntity)
{ {
source.sendFeedback(new StringTextComponent("Entity: " + ItemCarryonEntity.getEntity(main, player.world)), true); source.sendFeedback(new StringTextComponent("Entity: " + ItemCarryonEntity.getEntity(main, player.world)), true);
source.sendFeedback(new StringTextComponent("Entity Name: " + ItemCarryonEntity.getEntityName(main)), true); source.sendFeedback(new StringTextComponent("Entity Name: " + ItemCarryonEntity.getEntityName(main)), true);
@ -99,7 +97,8 @@ public class CommandCarryOn
} }
} }
} catch (CommandSyntaxException e) }
catch (CommandSyntaxException e)
{ {
return 0; return 0;
} }
@ -111,32 +110,20 @@ public class CommandCarryOn
{ {
for (ServerPlayerEntity player : players) for (ServerPlayerEntity player : players)
{ {
try int cleared = 0;
{ cleared += player.inventory.func_234564_a_(stack -> !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile, 64, player.container.func_234641_j_()); // TODO
if (source.assertIsEntity() != null) cleared += player.inventory.func_234564_a_(stack -> !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity, 64, player.container.func_234641_j_());
{
int cleared = 0;
cleared += player.inventory.func_234564_a_(stack -> !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile, 64, null); //TODO
cleared += player.inventory.func_234564_a_(stack -> !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity, 64, null);
CarryOn.network.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) player), new CarrySlotPacket(9, player.getEntityId())); CarryOn.network.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) player), new CarrySlotPacket(9, player.getEntityId()));
if (cleared != 1) if (cleared != 1)
source.sendFeedback(new StringTextComponent("Cleared " + cleared + " Items!"), true); source.sendFeedback(new StringTextComponent("Cleared " + cleared + " Items!"), true);
else else
source.sendFeedback(new StringTextComponent("Cleared " + cleared + " Item!"), true); source.sendFeedback(new StringTextComponent("Cleared " + cleared + " Item!"), true);
return 1; return 1;
} else
throw EntityArgument.ONLY_PLAYERS_ALLOWED.create();
} catch (CommandSyntaxException e)
{
return 0;
}
} }
return 0; return 0;
} }
} }

View File

@ -66,7 +66,7 @@ public class Configs {
{ {
if(event.getConfig().getModId().equals(CarryOn.MODID)) if(event.getConfig().getModId().equals(CarryOn.MODID))
{ {
ListHandler.initLists(); ListHandler.initConfigLists();
} }
} }
@ -235,7 +235,7 @@ public class Configs {
public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c) public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c)
{ {
s.comment("Whitelist"); s.comment("Whitelist. Read about the format here: https://github.com/Tschipp/CarryOn/wiki/Black---and-Whitelist-Config");
allowedEntities = s allowedEntities = s
.comment("Entities that CAN be picked up (useWhitelistEntities must be true)") .comment("Entities that CAN be picked up (useWhitelistEntities must be true)")
@ -261,12 +261,15 @@ public class Configs {
public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c) public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c)
{ {
s.comment("Blacklist"); s.comment("Blacklist. Read about the format here: https://github.com/Tschipp/CarryOn/wiki/Black---and-Whitelist-Config");
forbiddenTiles = s forbiddenTiles = s
.comment("Blocks that cannot be picked up") .comment("Blocks that cannot be picked up")
.defineList("blacklist.forbiddenTiles", Arrays.asList(new String[] .defineList("blacklist.forbiddenTiles", Arrays.asList(new String[]
{ {
"#forge:immovable",
"#forge:relocation_not_supported",
"#mekanism:cardboard_blacklist",
"minecraft:end_portal", "minecraft:end_portal",
"minecraft:end_gateway", "minecraft:end_gateway",
"minecraft:tall_grass", "minecraft:tall_grass",
@ -350,7 +353,10 @@ public class Configs {
"wearablebackpacks:*", "wearablebackpacks:*",
"rftools:screen", "rftools:screen",
"rftools:creative_screen", "rftools:creative_screen",
"create:*" "create:*",
"magic_doorknob:*",
"iceandfire:*",
"ftbquests:*"
}), (obj) -> obj instanceof String ? true : false); }), (obj) -> obj instanceof String ? true : false);
@ -375,7 +381,9 @@ public class Configs {
"animania:wagon", "animania:wagon",
"mynko:*", "mynko:*",
"pixelmon:*", "pixelmon:*",
"mocreatures:*" "mocreatures:*",
"quark:totem",
"vehicle:*"
}), (obj) -> obj instanceof String ? true : false); }), (obj) -> obj instanceof String ? true : false);
forbiddenStacking = s forbiddenStacking = s
@ -394,7 +402,7 @@ public class Configs {
public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c) public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c)
{ {
c.comment("Model Overrides"); c.comment("Model Overrides. Read about the format here: https://github.com/Tschipp/CarryOn/wiki/Model-Override-Config");
modelOverrides = c modelOverrides = c
@ -409,41 +417,6 @@ public class Configs {
"minecraft:flower_pot->(block)minecraft:flower_pot", "minecraft:flower_pot->(block)minecraft:flower_pot",
"minecraft:sugar_cane->(block)minecraft:sugar_cane", "minecraft:sugar_cane->(block)minecraft:sugar_cane",
"minecraft:redstone_wire->(item)minecraft:redstone", "minecraft:redstone_wire->(item)minecraft:redstone",
"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",
"quark:custom_chest{type:\"acacia\"}->quark:custom_chest;3",
"quark:custom_chest{type:\"dark_oak\"}->quark:custom_chest;4",
"quark:custom_chest_trap{type:\"spruce\"}->quark:custom_chest_trap;0",
"quark:custom_chest_trap{type:\"birch\"}->quark:custom_chest_trap;1",
"quark:custom_chest_trap{type:\"jungle\"}->quark:custom_chest_trap;2",
"quark:custom_chest_trap{type:\"acacia\"}->quark:custom_chest_trap;3",
"quark:custom_chest_trap{type:\"dark_oak\"}->quark:custom_chest_trap;4",
"storagedrawers:basicdrawers;0{Mat:\"spruce\"}->storagedrawers:basicdrawers;0{material:\"spruce\"}",
"storagedrawers:basicdrawers;0{Mat:\"birch\"}->storagedrawers:basicdrawers;0{material:\"birch\"}",
"storagedrawers:basicdrawers;0{Mat:\"jungle\"}->storagedrawers:basicdrawers;0{material:\"jungle\"}",
"storagedrawers:basicdrawers;0{Mat:\"acacia\"}->storagedrawers:basicdrawers;0{material:\"acacia\"}",
"storagedrawers:basicdrawers;0{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;0{material:\"dark_oak\"}",
"storagedrawers:basicdrawers;1{Mat:\"spruce\"}->storagedrawers:basicdrawers;1{material:\"spruce\"}",
"storagedrawers:basicdrawers;1{Mat:\"birch\"}->storagedrawers:basicdrawers;1{material:\"birch\"}",
"storagedrawers:basicdrawers;1{Mat:\"jungle\"}->storagedrawers:basicdrawers;1{material:\"jungle\"}",
"storagedrawers:basicdrawers;1{Mat:\"acacia\"}->storagedrawers:basicdrawers;1{material:\"acacia\"}",
"storagedrawers:basicdrawers;1{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;1{material:\"dark_oak\"}",
"storagedrawers:basicdrawers;2{Mat:\"spruce\"}->storagedrawers:basicdrawers;2{material:\"spruce\"}",
"storagedrawers:basicdrawers;2{Mat:\"birch\"}->storagedrawers:basicdrawers;2{material:\"birch\"}",
"storagedrawers:basicdrawers;2{Mat:\"jungle\"}->storagedrawers:basicdrawers;2{material:\"jungle\"}",
"storagedrawers:basicdrawers;2{Mat:\"acacia\"}->storagedrawers:basicdrawers;2{material:\"acacia\"}",
"storagedrawers:basicdrawers;2{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;2{material:\"dark_oak\"}",
"storagedrawers:basicdrawers;3{Mat:\"spruce\"}->storagedrawers:basicdrawers;3{material:\"spruce\"}",
"storagedrawers:basicdrawers;3{Mat:\"birch\"}->storagedrawers:basicdrawers;3{material:\"birch\"}",
"storagedrawers:basicdrawers;3{Mat:\"jungle\"}->storagedrawers:basicdrawers;3{material:\"jungle\"}",
"storagedrawers:basicdrawers;3{Mat:\"acacia\"}->storagedrawers:basicdrawers;3{material:\"acacia\"}",
"storagedrawers:basicdrawers;3{Mat:\"dark_oak\"}->storagedrawers:basicdrawers;3{material:\"dark_oak\"}",
"storagedrawers:basicdrawers;4{Mat:\"spruce\"}->storagedrawers:basicdrawers;4{material:\"spruce\"}",
"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\"}",
"animania:block_nest->(block)animania:block_nest", "animania:block_nest->(block)animania:block_nest",
"animania:cheese_mold;0->(block)animania:cheese_mold;0", "animania:cheese_mold;0->(block)animania:cheese_mold;0",
"animania:cheese_mold;1->(block)animania:cheese_mold;1", "animania:cheese_mold;1->(block)animania:cheese_mold;1",
@ -471,7 +444,7 @@ public class Configs {
public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c) public static void init(ForgeConfigSpec.Builder s, ForgeConfigSpec.Builder c)
{ {
s.comment("Custom Pickup Conditions"); s.comment("Custom Pickup Conditions. Read about the format here: https://github.com/Tschipp/CarryOn/wiki/Custom-Pickup-Condition-Config");
customPickupConditionsBlocks = s customPickupConditionsBlocks = s

View File

@ -109,7 +109,7 @@ public class ItemEntityEvents
if (entity instanceof AnimalEntity) if (entity instanceof AnimalEntity)
((AnimalEntity) entity).clearLeashed(true, true); ((AnimalEntity) entity).clearLeashed(true, true);
if (PickupHandler.canPlayerPickUpEntity(player, entity)) if (PickupHandler.canPlayerPickUpEntity((ServerPlayerEntity) player, entity))
{ {
if (ItemCarryonEntity.storeEntityData(entity, world, stack)) if (ItemCarryonEntity.storeEntityData(entity, world, stack))
{ {
@ -132,6 +132,7 @@ public class ItemEntityEvents
if (entity instanceof LivingEntity) if (entity instanceof LivingEntity)
((LivingEntity) entity).setHealth(0); ((LivingEntity) entity).setHealth(0);
entity.removePassengers();
entity.setPosition(entity.getPosX(), 0, entity.getPosZ()); entity.setPosition(entity.getPosX(), 0, entity.getPosZ());
entity.remove(); entity.remove();
player.setHeldItem(Hand.MAIN_HAND, stack); player.setHeldItem(Hand.MAIN_HAND, stack);
@ -148,7 +149,7 @@ public class ItemEntityEvents
if (entity.hurtResistantTime == 0 && entityHeld instanceof LivingEntity) if (entity.hurtResistantTime == 0 && entityHeld instanceof LivingEntity)
{ {
if (!world.isRemote && entityHeld.getUniqueID() != entity.getUniqueID() && !entityHeld.isAlive() && !entity.isAlive()) if (!world.isRemote && entityHeld.getUniqueID() != entity.getUniqueID() && entity.isAlive())
{ {
double sizeHeldEntity = entityHeld.getHeight() * entityHeld.getWidth(); double sizeHeldEntity = entityHeld.getHeight() * entityHeld.getWidth();

View File

@ -26,6 +26,7 @@ import net.minecraft.world.GameRules;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.event.TagsUpdatedEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
@ -55,6 +56,7 @@ import tschipp.carryon.common.config.Configs.Settings;
import tschipp.carryon.common.handler.CustomPickupOverrideHandler; import tschipp.carryon.common.handler.CustomPickupOverrideHandler;
import tschipp.carryon.common.handler.ListHandler; import tschipp.carryon.common.handler.ListHandler;
import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.PickupHandler;
import tschipp.carryon.common.handler.PickupHandler.PickUpBlockEvent;
import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.item.ItemCarryonBlock; import tschipp.carryon.common.item.ItemCarryonBlock;
import tschipp.carryon.common.item.ItemCarryonEntity; import tschipp.carryon.common.item.ItemCarryonEntity;
@ -143,7 +145,7 @@ public class ItemEvents
} }
} }
@SubscribeEvent @SubscribeEvent
public void onPlayerLogin(PlayerLoggedInEvent event) public void onPlayerLogin(PlayerLoggedInEvent event)
{ {
@ -191,8 +193,12 @@ public class ItemEvents
public void serverLoad(FMLServerStartingEvent event) public void serverLoad(FMLServerStartingEvent event)
{ {
CustomPickupOverrideHandler.initPickupOverrides(); CustomPickupOverrideHandler.initPickupOverrides();
ListHandler.initLists(); }
@SubscribeEvent
public void reloadTags(TagsUpdatedEvent event)
{
ListHandler.initConfigLists();
} }
@SubscribeEvent @SubscribeEvent
@ -286,10 +292,13 @@ public class ItemEvents
} }
} }
@SubscribeEvent @SubscribeEvent(priority = EventPriority.HIGH)
public static void onBlockRightClick(PlayerInteractEvent.RightClickBlock event) public static void onBlockRightClick(PlayerInteractEvent.RightClickBlock event)
{ {
PlayerEntity player = event.getPlayer(); PlayerEntity player = event.getPlayer();
if(event.isCanceled())
return;
if (!player.world.isRemote) if (!player.world.isRemote)
{ {
@ -306,9 +315,11 @@ public class ItemEvents
ItemStack stack = new ItemStack(RegistrationHandler.itemTile); ItemStack stack = new ItemStack(RegistrationHandler.itemTile);
TileEntity te = world.getTileEntity(pos); TileEntity te = world.getTileEntity(pos);
if (PickupHandler.canPlayerPickUpBlock(player, te, world, pos)) if (PickupHandler.canPlayerPickUpBlock((ServerPlayerEntity) player, te, world, pos))
{ {
player.closeScreen(); player.closeScreen();
world.playEvent(1010, pos, 0);
if (ItemCarryonBlock.storeTileData(te, world, pos, state, stack)) if (ItemCarryonBlock.storeTileData(te, world, pos, state, stack))
{ {
@ -517,7 +528,7 @@ public class ItemEvents
{ {
if (event.getConfig().getModId().equals(CarryOn.MODID)) if (event.getConfig().getModId().equals(CarryOn.MODID))
{ {
ListHandler.initLists(); ListHandler.initConfigLists();
Configs.loadConfig(Configs.CLIENT_CONFIG, FMLPaths.CONFIGDIR.get().resolve("carryon-client.toml")); Configs.loadConfig(Configs.CLIENT_CONFIG, FMLPaths.CONFIGDIR.get().resolve("carryon-client.toml"));
Configs.loadConfig(Configs.CLIENT_CONFIG, FMLPaths.CONFIGDIR.get().resolve("carryon-server.toml")); Configs.loadConfig(Configs.CLIENT_CONFIG, FMLPaths.CONFIGDIR.get().resolve("carryon-server.toml"));

View File

@ -2,9 +2,18 @@ package tschipp.carryon.common.handler;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import java.util.function.Function;
import javax.annotation.Nullable;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.command.arguments.BlockStateParser;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.state.Property;
import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModList;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import tschipp.carryon.common.config.Configs.CustomPickupConditions; import tschipp.carryon.common.config.Configs.CustomPickupConditions;
@ -74,28 +83,65 @@ public class CustomPickupOverrideHandler
} }
} }
private static final Function<Entry<Property<?>, Comparable<?>>, String> func = new Function<Entry<Property<?>, Comparable<?>>, String>() {
public String apply(@Nullable Entry<Property<?>, Comparable<?>> p_apply_1_)
{
if (p_apply_1_ == null)
{
return "<NULL>";
}
else
{
Property<?> property = p_apply_1_.getKey();
return property.getName() + "=" + this.func_235905_a_(property, p_apply_1_.getValue());
}
}
@SuppressWarnings("unchecked")
private <T extends Comparable<T>> String func_235905_a_(Property<T> p_235905_1_, Comparable<?> comp)
{
return p_235905_1_.getName((T) comp);
}
};
public static boolean hasSpecialPickupConditions(BlockState state) public static boolean hasSpecialPickupConditions(BlockState state)
{ {
if (!ModList.get().isLoaded("gamestages")) if (!ModList.get().isLoaded("gamestages"))
return false; return false;
String block = state.getBlock().getRegistryName().toString(); for(String cond : PICKUP_CONDITIONS.keySet())
{
BlockStateParser parser = new BlockStateParser(new StringReader(cond), false);
try
{
parser.parse(false);
}
catch (CommandSyntaxException e)
{
}
if(parser.getState() == state)
return true;
}
boolean absolute = PICKUP_CONDITIONS.containsKey(block); return false;
return absolute;
} }
public static String getPickupCondition(BlockState state) public static String getPickupCondition(BlockState state)
{ {
String block = state.getBlock().getRegistryName().toString(); for(String cond : PICKUP_CONDITIONS.keySet())
{
String absolute = PICKUP_CONDITIONS.get(block); BlockStateParser parser = new BlockStateParser(new StringReader(cond), false);
try
if (absolute != null) {
return absolute; parser.parse(false);
else }
return null; catch (CommandSyntaxException e)
{
}
if(parser.getState() == state)
return PICKUP_CONDITIONS.get(cond);
}
return null;
} }
public static boolean hasSpecialPickupConditions(Entity entity) public static boolean hasSpecialPickupConditions(Entity entity)

View File

@ -5,6 +5,11 @@ import java.util.List;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.EntityTypeTags;
import net.minecraft.tags.ITag;
import net.minecraft.tags.ITagCollection;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import tschipp.carryon.common.config.Configs.Blacklist; import tschipp.carryon.common.config.Configs.Blacklist;
@ -12,12 +17,19 @@ import tschipp.carryon.common.config.Configs.WhiteList;
public class ListHandler public class ListHandler
{ {
public static List<String> FORBIDDEN_TILES; public static List<String> FORBIDDEN_TILES = new ArrayList<>();
public static List<String> FORBIDDEN_ENTITIES; public static List<String> FORBIDDEN_ENTITIES = new ArrayList<>();
public static List<String> ALLOWED_ENTITIES; public static List<String> ALLOWED_ENTITIES = new ArrayList<>();
public static List<String> ALLOWED_TILES; public static List<String> ALLOWED_TILES = new ArrayList<>();
public static List<String> FORBIDDEN_STACKING; public static List<String> FORBIDDEN_STACKING = new ArrayList<>();
public static List<String> ALLOWED_STACKING; public static List<String> ALLOWED_STACKING = new ArrayList<>();
public static List<ITag<Block>> FORBIDDEN_TILES_TAGS = new ArrayList<>();
public static List<ITag<EntityType<?>>> FORBIDDEN_ENTITIES_TAGS = new ArrayList<>();
public static List<ITag<EntityType<?>>> ALLOWED_ENTITIES_TAGS = new ArrayList<>();
public static List<ITag<Block>> ALLOWED_TILES_TAGS = new ArrayList<>();
public static List<ITag<EntityType<?>>> FORBIDDEN_STACKING_TAGS = new ArrayList<>();
public static List<ITag<EntityType<?>>> ALLOWED_STACKING_TAGS = new ArrayList<>();
public static boolean isForbidden(Block block) public static boolean isForbidden(Block block)
{ {
@ -36,6 +48,12 @@ public class ListHandler
contains = true; contains = true;
} }
} }
for(ITag<Block> tag : FORBIDDEN_TILES_TAGS)
{
if(tag.contains(block))
return true;
}
return contains; return contains;
} }
@ -45,6 +63,13 @@ public class ListHandler
{ {
String name = entity.getType().getRegistryName().toString(); String name = entity.getType().getRegistryName().toString();
boolean contains = FORBIDDEN_ENTITIES.contains(name); boolean contains = FORBIDDEN_ENTITIES.contains(name);
for(ITag<EntityType<?>> tag : FORBIDDEN_ENTITIES_TAGS)
{
if(tag.contains(entity.getType()))
return true;
}
return contains; return contains;
} }
@ -52,6 +77,13 @@ public class ListHandler
{ {
String name = entity.getType().getRegistryName().toString(); String name = entity.getType().getRegistryName().toString();
boolean contains = ALLOWED_ENTITIES.contains(name); boolean contains = ALLOWED_ENTITIES.contains(name);
for(ITag<EntityType<?>> tag : ALLOWED_ENTITIES_TAGS)
{
if(tag.contains(entity.getType()))
return true;
}
return contains; return contains;
} }
@ -59,6 +91,13 @@ public class ListHandler
{ {
String name = entity.getType().getRegistryName().toString(); String name = entity.getType().getRegistryName().toString();
boolean contains = FORBIDDEN_STACKING.contains(name); boolean contains = FORBIDDEN_STACKING.contains(name);
for(ITag<EntityType<?>> tag : FORBIDDEN_STACKING_TAGS)
{
if(tag.contains(entity.getType()))
return true;
}
return contains; return contains;
} }
@ -66,6 +105,13 @@ public class ListHandler
{ {
String name = entity.getType().getRegistryName().toString(); String name = entity.getType().getRegistryName().toString();
boolean contains = ALLOWED_STACKING.contains(name); boolean contains = ALLOWED_STACKING.contains(name);
for(ITag<EntityType<?>> tag : ALLOWED_STACKING_TAGS)
{
if(tag.contains(entity.getType()))
return true;
}
return contains; return contains;
} }
@ -86,123 +132,227 @@ public class ListHandler
contains = true; contains = true;
} }
} }
for(ITag<Block> tag : ALLOWED_TILES_TAGS)
{
if(tag.contains(block))
return true;
}
return contains; return contains;
} }
} }
@SuppressWarnings("unchecked") public static void initConfigLists()
public static void initLists()
{ {
List<String> forbidden = (List<String>) Blacklist.forbiddenTiles.get(); FORBIDDEN_ENTITIES.clear();
FORBIDDEN_ENTITIES_TAGS.clear();
FORBIDDEN_STACKING.clear();
FORBIDDEN_STACKING_TAGS.clear();
FORBIDDEN_TILES.clear();
FORBIDDEN_TILES_TAGS.clear();
ALLOWED_ENTITIES.clear();
ALLOWED_ENTITIES_TAGS.clear();
ALLOWED_STACKING.clear();
ALLOWED_STACKING_TAGS.clear();
ALLOWED_TILES.clear();
ALLOWED_TILES_TAGS.clear();
List<String> forbidden = new ArrayList<>(Blacklist.forbiddenTiles.get());
forbidden.add("#carryon:block_blacklist");
FORBIDDEN_TILES = new ArrayList<String>(); FORBIDDEN_TILES = new ArrayList<String>();
for (int i = 0; i < forbidden.size(); i++) for (int i = 0; i < forbidden.size(); i++)
{ {
FORBIDDEN_TILES.add(forbidden.get(i)); if (!forbidden.get(i).startsWith("#"))
FORBIDDEN_TILES.add(forbidden.get(i));
} }
List<String> forbiddenEntity = (List<String>) Blacklist.forbiddenEntities.get(); List<String> forbiddenEntity = new ArrayList<>(Blacklist.forbiddenEntities.get());
forbiddenEntity.add("#carryon:entity_blacklist");
FORBIDDEN_ENTITIES = new ArrayList<String>(); FORBIDDEN_ENTITIES = new ArrayList<String>();
for (int i = 0; i < forbiddenEntity.size(); i++) for (int i = 0; i < forbiddenEntity.size(); i++)
{ {
if (forbiddenEntity.get(i).contains("*")) if (!forbiddenEntity.get(i).startsWith("#"))
{ {
String[] filter = forbiddenEntity.get(i).replace("*", ",").split(","); if (forbiddenEntity.get(i).contains("*"))
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
if (containsAll(key.toString(), filter)) String[] filter = forbiddenEntity.get(i).replace("*", ",").split(",");
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
FORBIDDEN_ENTITIES.add(key.toString()); if (containsAll(key.toString(), filter))
{
FORBIDDEN_ENTITIES.add(key.toString());
}
} }
} }
FORBIDDEN_ENTITIES.add(forbiddenEntity.get(i));
} }
FORBIDDEN_ENTITIES.add(forbiddenEntity.get(i));
} }
List<String> allowedEntities = (List<String>) WhiteList.allowedEntities.get(); List<String> allowedEntities = new ArrayList<>(WhiteList.allowedEntities.get());
allowedEntities.add("#carryon:entity_whitelist");
ALLOWED_ENTITIES = new ArrayList<String>(); ALLOWED_ENTITIES = new ArrayList<String>();
for (int i = 0; i < allowedEntities.size(); i++) for (int i = 0; i < allowedEntities.size(); i++)
{ {
if (allowedEntities.get(i).contains("*")) if (!allowedEntities.get(i).startsWith("#"))
{ {
String[] filter = allowedEntities.get(i).replace("*", ",").split(","); if (allowedEntities.get(i).contains("*"))
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
if (containsAll(key.toString(), filter)) String[] filter = allowedEntities.get(i).replace("*", ",").split(",");
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
ALLOWED_ENTITIES.add(key.toString()); if (containsAll(key.toString(), filter))
{
ALLOWED_ENTITIES.add(key.toString());
}
} }
} }
ALLOWED_ENTITIES.add(allowedEntities.get(i));
} }
ALLOWED_ENTITIES.add(allowedEntities.get(i));
} }
List<String> allowedBlocks = (List<String>) WhiteList.allowedBlocks.get(); List<String> allowedBlocks = new ArrayList<>(WhiteList.allowedBlocks.get());
allowedBlocks.add("#carryon:block_whitelist");
ALLOWED_TILES = new ArrayList<String>(); ALLOWED_TILES = new ArrayList<String>();
for (int i = 0; i < allowedBlocks.size(); i++) for (int i = 0; i < allowedBlocks.size(); i++)
{ {
ALLOWED_TILES.add(allowedBlocks.get(i)); if (!allowedBlocks.get(i).startsWith("#"))
ALLOWED_TILES.add(allowedBlocks.get(i));
} }
List<String> forbiddenStacking = (List<String>) Blacklist.forbiddenStacking.get(); List<String> forbiddenStacking = new ArrayList<>(Blacklist.forbiddenStacking.get());
forbiddenStacking.add("#carryon:stacking_blacklist");
FORBIDDEN_STACKING = new ArrayList<String>(); FORBIDDEN_STACKING = new ArrayList<String>();
for (int i = 0; i < forbiddenStacking.size(); i++) for (int i = 0; i < forbiddenStacking.size(); i++)
{ {
if (forbiddenStacking.get(i).contains("*")) if (!forbiddenStacking.get(i).startsWith("#"))
{ {
String[] filter = forbiddenStacking.get(i).replace("*", ",").split(","); if (forbiddenStacking.get(i).contains("*"))
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
if (containsAll(key.toString(), filter)) String[] filter = forbiddenStacking.get(i).replace("*", ",").split(",");
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
FORBIDDEN_STACKING.add(key.toString()); if (containsAll(key.toString(), filter))
{
FORBIDDEN_STACKING.add(key.toString());
}
} }
} }
FORBIDDEN_STACKING.add(forbiddenStacking.get(i));
} }
FORBIDDEN_STACKING.add(forbiddenStacking.get(i));
} }
List<String> allowedStacking = (List<String>) WhiteList.allowedStacking.get(); List<String> allowedStacking = new ArrayList<>(WhiteList.allowedStacking.get());
allowedStacking.add("#carryon:stacking_whitelist");
ALLOWED_STACKING = new ArrayList<String>(); ALLOWED_STACKING = new ArrayList<String>();
for (int i = 0; i < allowedStacking.size(); i++) for (int i = 0; i < allowedStacking.size(); i++)
{ {
if (allowedStacking.get(i).contains("*")) if (!allowedStacking.get(i).startsWith("#"))
{ {
String[] filter = allowedStacking.get(i).replace("*", ",").split(","); if (allowedStacking.get(i).contains("*"))
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
if (containsAll(key.toString(), filter)) String[] filter = allowedStacking.get(i).replace("*", ",").split(",");
ResourceLocation[] keys = ForgeRegistries.ENTITIES.getKeys().toArray(new ResourceLocation[0]);
for (ResourceLocation key : keys)
{ {
ALLOWED_STACKING.add(key.toString()); if (containsAll(key.toString(), filter))
{
ALLOWED_STACKING.add(key.toString());
}
} }
} }
ALLOWED_STACKING.add(allowedStacking.get(i));
}
}
ITagCollection<Block> blocktags = BlockTags.getCollection();
ITagCollection<EntityType<?>> entitytags = EntityTypeTags.getCollection();
System.out.println(blocktags.getRegisteredTags());
for (String s : forbidden)
{
if (s.startsWith("#"))
{
String sub = s.substring(1, s.length());
ITag<Block> tag = blocktags.get(new ResourceLocation(sub));
if (tag != null)
FORBIDDEN_TILES_TAGS.add(tag);
}
}
for (String s : allowedBlocks)
{
if (s.startsWith("#"))
{
ITag<Block> tag = blocktags.get(new ResourceLocation(s.substring(1, s.length())));
if (tag != null)
ALLOWED_TILES_TAGS.add(tag);
}
}
for (String s : forbiddenEntity)
{
if (s.startsWith("#"))
{
ITag<EntityType<?>> tag = entitytags.get(new ResourceLocation(s.substring(1, s.length())));
if (tag != null)
FORBIDDEN_ENTITIES_TAGS.add(tag);
}
}
for (String s : allowedEntities)
{
if (s.startsWith("#"))
{
ITag<EntityType<?>> tag = entitytags.get(new ResourceLocation(s.substring(1, s.length())));
if (tag != null)
ALLOWED_ENTITIES_TAGS.add(tag);
}
}
for (String s : forbiddenStacking)
{
if (s.startsWith("#"))
{
ITag<EntityType<?>> tag = entitytags.get(new ResourceLocation(s.substring(1, s.length())));
if (tag != null)
FORBIDDEN_STACKING_TAGS.add(tag);
}
}
for (String s : allowedStacking)
{
if (s.startsWith("#"))
{
ITag<EntityType<?>> tag = entitytags.get(new ResourceLocation(s.substring(1, s.length())));
if (tag != null)
ALLOWED_STACKING_TAGS.add(tag);
} }
ALLOWED_STACKING.add(allowedStacking.get(i));
} }
} }
public static boolean containsAll(String str, String... strings) public static boolean containsAll(String str, String... strings)
{ {
boolean containsAll = true; boolean containsAll = true;
for(String s : strings) for (String s : strings)
{ {
if(!str.contains(s)) if (!str.contains(s))
containsAll = false; containsAll = false;
} }
return containsAll; return containsAll;
} }

View File

@ -15,6 +15,7 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.GameType;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent;
@ -28,8 +29,11 @@ import tschipp.carryon.common.scripting.ScriptChecker;
public class PickupHandler public class PickupHandler
{ {
public static boolean canPlayerPickUpBlock(PlayerEntity player, @Nullable TileEntity tile, World world, BlockPos pos) public static boolean canPlayerPickUpBlock(ServerPlayerEntity player, @Nullable TileEntity tile, World world, BlockPos pos)
{ {
if(player.interactionManager.getGameType() == GameType.SPECTATOR || player.interactionManager.getGameType() == GameType.ADVENTURE)
return false;
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
CompoundNBT tag = new CompoundNBT(); CompoundNBT tag = new CompoundNBT();
@ -75,7 +79,7 @@ public class PickupHandler
} }
else if (Settings.pickupAllBlocks.get() ? true : tile != null) else if (Settings.pickupAllBlocks.get() ? true : tile != null)
{ {
return handleProtections((ServerPlayerEntity) player, world, pos, state); return handleProtections(player, world, pos, state);
} }
} }
@ -86,8 +90,11 @@ public class PickupHandler
return false; return false;
} }
public static boolean canPlayerPickUpEntity(PlayerEntity player, Entity toPickUp) public static boolean canPlayerPickUpEntity(ServerPlayerEntity player, Entity toPickUp)
{ {
if(player.interactionManager.getGameType() == GameType.SPECTATOR || player.interactionManager.getGameType() == GameType.ADVENTURE)
return false;
BlockPos pos = toPickUp.getPosition(); BlockPos pos = toPickUp.getPosition();
if (toPickUp instanceof PlayerEntity) if (toPickUp instanceof PlayerEntity)
@ -96,7 +103,7 @@ public class PickupHandler
CarryOnOverride override = ScriptChecker.inspectEntity(toPickUp); CarryOnOverride override = ScriptChecker.inspectEntity(toPickUp);
if (override != null) if (override != null)
{ {
return (ScriptChecker.fulfillsConditions(override, player)) && handleProtections((ServerPlayerEntity) player, toPickUp); return (ScriptChecker.fulfillsConditions(override, player)) && handleProtections(player, toPickUp);
} }
else else
{ {
@ -177,11 +184,27 @@ public class PickupHandler
return false; return false;
} }
public static class PickUpBlockEvent extends BlockEvent.BreakEvent
{
public PickUpBlockEvent(World world, BlockPos pos, BlockState state, PlayerEntity player)
{
super(world, pos, state, player);
}
}
public static class PickUpEntityEvent extends AttackEntityEvent
{
public PickUpEntityEvent(PlayerEntity player, Entity target)
{
super(player, target);
}
}
private static boolean handleProtections(ServerPlayerEntity player, World world, BlockPos pos, BlockState state) private static boolean handleProtections(ServerPlayerEntity player, World world, BlockPos pos, BlockState state)
{ {
boolean breakable = true; boolean breakable = true;
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player); PickUpBlockEvent event = new PickUpBlockEvent(world, pos, state, player);
MinecraftForge.EVENT_BUS.post(event); MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled()) if (event.isCanceled())
@ -194,7 +217,7 @@ public class PickupHandler
{ {
boolean canPickup = true; boolean canPickup = true;
AttackEntityEvent event = new AttackEntityEvent(player, entity); PickUpEntityEvent event = new PickUpEntityEvent(player, entity);
MinecraftForge.EVENT_BUS.post(event); MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled()) if (event.isCanceled())

View File

@ -60,7 +60,7 @@ public class RegistrationHandler
{ {
ModelOverridesHandler.initOverrides(); ModelOverridesHandler.initOverrides();
CustomPickupOverrideHandler.initPickupOverrides(); CustomPickupOverrideHandler.initPickupOverrides();
ListHandler.initLists(); // ListHandler.initConfigLists();
} }
public static void regCaps() public static void regCaps()

View File

@ -1,12 +1,12 @@
package tschipp.carryon.common.helper; package tschipp.carryon.common.helper;
import net.darkhax.gamestages.GameStageHelper;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
public class CarryonGamestageHelper public class CarryonGamestageHelper
{ {
public static boolean hasGamestage(String stage, PlayerEntity player) public static boolean hasGamestage(String stage, PlayerEntity player)
{ {
// return GameStageHelper.hasStage(player, stage); return GameStageHelper.hasStage(player, stage);
return true;
} }
} }

View File

@ -119,9 +119,10 @@ public class ItemCarryonBlock extends Item
{ {
BlockState placementState = containedblock.getStateForPlacement(new BlockItemUseContext(context)); BlockState placementState = containedblock.getStateForPlacement(new BlockItemUseContext(context));
BlockState actualState = placementState == null ? containedstate : placementState;
BlockState actualState = placementState; //Attempted fix for #287
// for (IProperty<?> prop : placementState.getValues().keySet()) // for (IProperty<?> prop : placementState.getValues().keySet())
// { // {
// if (prop instanceof DirectionProperty) // if (prop instanceof DirectionProperty)
@ -184,8 +185,9 @@ public class ItemCarryonBlock extends Item
TileEntity tile = world.getTileEntity(pos2); TileEntity tile = world.getTileEntity(pos2);
if (tile != null) if (tile != null)
{ {
tile.deserializeNBT(getTileData(stack)); CompoundNBT data = getTileData(stack);
tile.setPos(pos2); updateTileLocation(data, pos2);
tile.read(actualState, data);
} }
clearTileData(stack); clearTileData(stack);
player.playSound(actualState.getSoundType(world, pos2, player).getPlaceSound(), 1.0f, 0.5f); player.playSound(actualState.getSoundType(world, pos2, player).getPlaceSound(), 1.0f, 0.5f);
@ -264,15 +266,15 @@ public class ItemCarryonBlock extends Item
if (stack.isEmpty()) if (stack.isEmpty())
return false; return false;
CompoundNBT chest = new CompoundNBT(); CompoundNBT tileTag = new CompoundNBT();
if (tile != null) if (tile != null)
chest = tile.write(chest); tileTag = tile.write(tileTag);
CompoundNBT tag = stack.hasTag() ? stack.getTag() : new CompoundNBT(); CompoundNBT tag = stack.hasTag() ? stack.getTag() : new CompoundNBT();
if (tag.contains(TILE_DATA_KEY)) if (tag.contains(TILE_DATA_KEY))
return false; return false;
tag.put(TILE_DATA_KEY, chest); tag.put(TILE_DATA_KEY, tileTag);
// ItemStack drop = new ItemStack(state.getBlock().getItemDropped(state, // ItemStack drop = new ItemStack(state.getBlock().getItemDropped(state,
// itemRand, 0), 1, state.getBlock().damageDropped(state)); // itemRand, 0), 1, state.getBlock().damageDropped(state));
@ -284,6 +286,13 @@ public class ItemCarryonBlock extends Item
stack.setTag(tag); stack.setTag(tag);
return true; return true;
} }
public static void updateTileLocation(CompoundNBT tag, BlockPos pos)
{
tag.putInt("x", pos.getX());
tag.putInt("y", pos.getY());
tag.putInt("z", pos.getZ());
}
public static void clearTileData(ItemStack stack) public static void clearTileData(ItemStack stack)
{ {

View File

@ -1,79 +1,101 @@
package tschipp.carryon.compat.obfuscate; package tschipp.carryon.compat.obfuscate;
import com.mrcrayfish.obfuscate.client.event.PlayerModelEvent;
import net.minecraft.client.renderer.entity.model.PlayerModel;
import net.minecraft.client.renderer.model.ModelRenderer;
import net.minecraft.entity.Pose;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import tschipp.carryon.common.config.Configs.Settings;
import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.helper.ScriptParseHelper;
import tschipp.carryon.common.item.ItemCarryonBlock;
import tschipp.carryon.common.item.ItemCarryonEntity;
import tschipp.carryon.common.scripting.CarryOnOverride;
import tschipp.carryon.common.scripting.ScriptChecker;
public class ObfuscateEvents public class ObfuscateEvents
{ {
//
// @SubscribeEvent @SubscribeEvent
// public void preModelPlayerEvent(ModelPlayerEvent.SetupAngles.Post event) public void preModelPlayerEvent(PlayerModelEvent.SetupAngles.Post event)
// { {
// if(!CarryOnConfig.settings.renderArms.get()) if(!Settings.renderArms.get())
// return; return;
//
// PlayerEntity player = event.getPlayerEntity(); PlayerEntity player = event.getPlayer();
//
// ModelPlayer model = event.getModelPlayer(); Pose pose = player.getPose();
// ItemStack stack = player.getHeldItemMainhand(); if (pose == Pose.SWIMMING || pose == Pose.FALL_FLYING)
// if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) return;
// {
// PlayerModel<?> model = event.getModelPlayer();
// float rotation = 0; ItemStack stack = player.getHeldItemMainhand();
// if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemCarryonBlock.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemCarryonEntity.hasEntityData(stack))
// CarryOnOverride overrider = ScriptChecker.getOverride(player); {
// if (overrider != null)
// { float rotation = 0;
// double[] rotLeft = null;
// double[] rotRight = null; CarryOnOverride overrider = ScriptChecker.getOverride(player);
// if (overrider.getRenderRotationLeftArm() != null) if (overrider != null)
// rotLeft = ScriptParseHelper.getXYZArray(overrider.getRenderRotationLeftArm()); {
// if (overrider.getRenderRotationRightArm() != null) float[] rotLeft = null;
// rotRight = ScriptParseHelper.getXYZArray(overrider.getRenderRotationRightArm()); float[] rotRight = null;
// if (overrider.getRenderRotationLeftArm() != null)
// boolean renderRight = overrider.isRenderRightArm(); rotLeft = ScriptParseHelper.getXYZArray(overrider.getRenderRotationLeftArm());
// boolean renderLeft = overrider.isRenderLeftArm(); if (overrider.getRenderRotationRightArm() != null)
// rotRight = ScriptParseHelper.getXYZArray(overrider.getRenderRotationRightArm());
// if (renderLeft && rotLeft != null)
// { boolean renderRight = overrider.isRenderRightArm();
// renderArmPre(model.bipedLeftArm, (float) rotLeft[0], (float) rotLeft[2], rotation); boolean renderLeft = overrider.isRenderLeftArm();
// renderArmPre(model.bipedLeftArmwear, (float) rotLeft[0], (float) rotLeft[2], rotation);
// } if (renderLeft && rotLeft != null)
// else if (renderLeft) {
// { renderArmPre(model.bipedLeftArm, (float) rotLeft[0], (float) rotLeft[2], rotation);
// renderArmPre(model.bipedLeftArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation); renderArmPre(model.bipedLeftArmwear, (float) rotLeft[0], (float) rotLeft[2], rotation);
// renderArmPre(model.bipedLeftArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation); }
// } else if (renderLeft)
// {
// if (renderRight && rotRight != null) renderArmPre(model.bipedLeftArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation);
// { renderArmPre(model.bipedLeftArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation);
// renderArmPre(model.bipedRightArm, (float) rotRight[0], (float) rotRight[2], rotation); }
// renderArmPre(model.bipedRightArmwear, (float) rotRight[0], (float) rotRight[2], rotation);
// } if (renderRight && rotRight != null)
// else if (renderRight) {
// { renderArmPre(model.bipedRightArm, (float) rotRight[0], (float) rotRight[2], rotation);
// renderArmPre(model.bipedRightArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation); renderArmPre(model.bipedRightArmwear, (float) rotRight[0], (float) rotRight[2], rotation);
// renderArmPre(model.bipedRightArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation); }
// } else if (renderRight)
// {
// } renderArmPre(model.bipedRightArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation);
// else renderArmPre(model.bipedRightArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation);
// { }
// renderArmPre(model.bipedRightArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation);
// renderArmPre(model.bipedRightArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation); }
// renderArmPre(model.bipedLeftArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation); else
// renderArmPre(model.bipedLeftArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation); {
// } renderArmPre(model.bipedRightArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation);
// renderArmPre(model.bipedRightArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation);
// } renderArmPre(model.bipedLeftArm, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation);
// renderArmPre(model.bipedLeftArmwear, 0.8F + (player.isSneaking() ? 0.2f : 0f) - (stack.getItem() == RegistrationHandler.itemEntity ? -0.2f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation);
// } }
//
// }
// @OnlyIn(Dist.CLIENT)
// private void renderArmPre(ModelRenderer arm, float x, float z, float rotation) }
// {
// arm.rotateAngleX = (float) -x;
// arm.rotateAngleY = (float) -Math.toRadians(rotation); @OnlyIn(Dist.CLIENT)
// arm.rotateAngleZ = (float) z; private void renderArmPre(ModelRenderer arm, float x, float z, float rotation)
// } {
// arm.rotateAngleX = (float) -x;
arm.rotateAngleY = (float) -Math.toRadians(rotation);
arm.rotateAngleZ = (float) z;
}
} }

View File

@ -26,6 +26,7 @@ public class ClientProxy implements IProxy {
@Override @Override
public PlayerEntity getPlayer() public PlayerEntity getPlayer()
{ {
return Minecraft.getInstance().player; return Minecraft.getInstance().player;
} }

View File

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}

View File

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}

View File

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}

View File

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}

View File

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}

View File

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}