diff --git a/Common/src/main/java/tschipp/carryon/client/keybinds/CarryOnKeybinds.java b/Common/src/main/java/tschipp/carryon/client/keybinds/CarryOnKeybinds.java index 93c638b..6ff0f5c 100644 --- a/Common/src/main/java/tschipp/carryon/client/keybinds/CarryOnKeybinds.java +++ b/Common/src/main/java/tschipp/carryon/client/keybinds/CarryOnKeybinds.java @@ -14,7 +14,11 @@ public class CarryOnKeybinds public static void registerKeybinds(Consumer registrar) { - carryKey = new ConflictFreeKeyMapping("key.carry.desc", Services.PLATFORM.getPlatformName().equals("Forge") ? InputConstants.KEY_LSHIFT : InputConstants.UNKNOWN.getValue(), "key.carry.category"); + if(Services.PLATFORM.isModLoaded("amecsapi")) + carryKey = new ConflictFreeKeyMapping("key.carry.desc", InputConstants.KEY_LSHIFT, "key.carry.category"); + else + carryKey = new ConflictFreeKeyMapping("key.carry.desc", Services.PLATFORM.getPlatformName().equals("Forge") ? InputConstants.KEY_LSHIFT : InputConstants.UNKNOWN.getValue(), "key.carry.category"); + registrar.accept(carryKey); } diff --git a/Common/src/main/java/tschipp/carryon/common/config/ListHandler.java b/Common/src/main/java/tschipp/carryon/common/config/ListHandler.java index b7a049e..2cc7702 100644 --- a/Common/src/main/java/tschipp/carryon/common/config/ListHandler.java +++ b/Common/src/main/java/tschipp/carryon/common/config/ListHandler.java @@ -30,7 +30,6 @@ public class ListHandler { private static List>> FORBIDDEN_STACKING_TAGS = new ArrayList<>(); private static List>> ALLOWED_STACKING_TAGS = new ArrayList<>(); - private static Set> PROPERTY_EXCEPTION_CLASSES = new HashSet<>(); public static boolean isPermitted(Block block) @@ -141,7 +140,6 @@ public class ListHandler { } } } - } private static void addTag(String tag, Map> tagMap, List> tags) { diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 132adb3..9564cc2 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -16,6 +16,10 @@ if (System.getenv('BUILD_NUMBER') != null) { } repositories { maven { url 'https://jitpack.io' } + maven { + url "https://maven.siphalor.de/" + name "Siphalor's Maven" + } } @@ -31,6 +35,9 @@ dependencies { implementation project(":Common") include implementation("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") annotationProcessor("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") + + modImplementation "de.siphalor:amecsapi-1.19:1.3.9+mc1.19.4" + include "de.siphalor:amecsapi-1.19:1.3.9+mc1.19.4" } loom { diff --git a/Fabric/src/main/java/tschipp/carryon/compat/ArchitecturyCompat.java b/Fabric/src/main/java/tschipp/carryon/compat/ArchitecturyCompat.java new file mode 100644 index 0000000..863b3e4 --- /dev/null +++ b/Fabric/src/main/java/tschipp/carryon/compat/ArchitecturyCompat.java @@ -0,0 +1,66 @@ +package tschipp.carryon.compat; + +import net.fabricmc.fabric.api.event.Event; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import tschipp.carryon.Constants; +import tschipp.carryon.platform.Services; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class ArchitecturyCompat { + + private static Object INVOKER_INSTANCE; + private static Method PLACE_BLOCK; + private static Method IS_FALSE; + + private static void setup( ) { + try { + Class BlockEvent = Class.forName("dev.architectury.event.events.common.BlockEvent"); + Field PLACE = BlockEvent.getField("PLACE"); + Method invoker = Class.forName("dev.architectury.event.Event").getMethod("invoker"); + INVOKER_INSTANCE = invoker.invoke(PLACE.get(BlockEvent)); + Class PlaceClass = Class.forName("dev.architectury.event.events.common.BlockEvent$Place"); + PLACE_BLOCK = PlaceClass.getMethod("placeBlock", Level.class, BlockPos.class, BlockState.class, Entity.class); + Class EventResult = Class.forName("dev.architectury.event.EventResult"); + IS_FALSE = EventResult.getMethod("isFalse"); + + } catch (Exception e) { + Constants.LOG.warn("Error while initializing Architectury Compat: " + e); + } + } + + public static boolean active() { + return Services.PLATFORM.isModLoaded("architectury"); + } + + public static boolean sendPlaceEvent(Level level, BlockPos pos, BlockState state, Player player) { + if(!active()) + return true; + + if(INVOKER_INSTANCE == null || PLACE_BLOCK == null) + setup(); + + if(INVOKER_INSTANCE != null && PLACE_BLOCK != null && IS_FALSE != null) { + try { + Object eventResult = PLACE_BLOCK.invoke(INVOKER_INSTANCE, level, pos, state, player); + boolean canceled = (boolean) IS_FALSE.invoke(eventResult); + + return !canceled; + + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + return true; + } + +} diff --git a/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java b/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java index 6b3fe2a..da3c3ac 100644 --- a/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java +++ b/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java @@ -19,6 +19,7 @@ import tschipp.carryon.common.carry.CarryOnDataManager; import tschipp.carryon.common.carry.PickupHandler; import tschipp.carryon.common.carry.PlacementHandler; import tschipp.carryon.common.scripting.ScriptReloadListener; +import tschipp.carryon.compat.ArchitecturyCompat; import tschipp.carryon.config.ConfigLoader; import tschipp.carryon.scripting.IdentifiableScriptReloadListener; @@ -42,7 +43,10 @@ public class CommonEvents { CarryOnData carry = CarryOnDataManager.getCarryData(player); if(!carry.isCarrying()) { - if (PickupHandler.tryPickUpBlock((ServerPlayer) player, pos, world, null)) + if (PickupHandler.tryPickUpBlock((ServerPlayer) player, pos, world, (pState, pPos) -> { + boolean success = PlayerBlockBreakEvents.BEFORE.invoker().beforeBlockBreak(world, player, pPos, pState, world.getBlockEntity(pPos)); + return success; + })) return InteractionResult.SUCCESS; return InteractionResult.PASS; } @@ -50,7 +54,9 @@ public class CommonEvents { { if(carry.isCarrying(CarryOnData.CarryType.BLOCK)) { - if(PlacementHandler.tryPlaceBlock((ServerPlayer) player, pos, facing, null)) + if(PlacementHandler.tryPlaceBlock((ServerPlayer) player, pos, facing, (pState, pPos) -> { + return ArchitecturyCompat.sendPlaceEvent(world, pState, pPos, player); + })) return InteractionResult.SUCCESS; } else diff --git a/Forge/src/main/java/tschipp/carryon/CarryOnForge.java b/Forge/src/main/java/tschipp/carryon/CarryOnForge.java index 2ae7fd1..dd4db19 100644 --- a/Forge/src/main/java/tschipp/carryon/CarryOnForge.java +++ b/Forge/src/main/java/tschipp/carryon/CarryOnForge.java @@ -1,6 +1,7 @@ package tschipp.carryon; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; diff --git a/Forge/src/main/java/tschipp/carryon/events/ModBusEvents.java b/Forge/src/main/java/tschipp/carryon/events/ModBusEvents.java index 17e11dc..1ddf80f 100644 --- a/Forge/src/main/java/tschipp/carryon/events/ModBusEvents.java +++ b/Forge/src/main/java/tschipp/carryon/events/ModBusEvents.java @@ -6,6 +6,7 @@ import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.InterModComms.IMCMessage; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; import tschipp.carryon.Constants; import tschipp.carryon.client.modeloverride.ModelOverrideHandler; import tschipp.carryon.common.config.ListHandler; @@ -16,7 +17,7 @@ import java.util.stream.Stream; public class ModBusEvents { @SubscribeEvent(priority = EventPriority.LOW) - public static void serverLoad(FMLCommonSetupEvent event) + public static void serverLoad(InterModProcessEvent event) { Stream messages = InterModComms.getMessages(Constants.MOD_ID); @@ -28,6 +29,7 @@ public class ModBusEvents { if (!(obj instanceof String str)) return; + switch (method) { case "blacklistBlock": ListHandler.addForbiddenTiles(str); diff --git a/gradle.properties b/gradle.properties index c1c7bf6..081c54f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,13 +10,13 @@ common_server_run_name=Common Server # Forge forge_version=45.0.47 -parchment_mappings=1.19.3-2023.03.12-1.19.4 +parchment_mappings=2023.06.26-1.19.4 //forge_ats_enabled=true # Fabric -fabric_version=0.79.0+1.19.4 -fabric_loader_version=0.14.19 -parchment_mappings_fabric=1.19.3:2023.03.12 +fabric_version=0.85.0+1.19.4 +fabric_loader_version=0.14.21 +parchment_mappings_fabric=1.19.4:2023.06.26 # Quilt quilt_loader_version=0.16.0-beta.7