diff --git a/Common/build.gradle b/Common/build.gradle index 416cdb9..5ba1e5a 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -21,9 +21,15 @@ minecraft { } } +repositories { + maven { url 'https://jitpack.io' } +} + dependencies { compileOnly group:'org.spongepowered', name:'mixin', version:'0.8.5' implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' + implementation("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") + annotationProcessor("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") } processResources { diff --git a/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java b/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java index 8f71bd9..7ca37aa 100644 --- a/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java +++ b/Common/src/main/java/tschipp/carryon/client/render/CarriedObjectRender.java @@ -37,10 +37,16 @@ public class CarriedObjectRender return false; CarryOnData carry = CarryOnDataManager.getCarryData(player); - if(carry.isCarrying(CarryType.BLOCK)) - drawFirstPersonBlock(player, buffer, matrix, light, CarryRenderHelper.getRenderState(player)); - else if (carry.isCarrying(CarryType.ENTITY)) - drawFirstPersonEntity(player, buffer, matrix, light, partialTicks); + try { + if (carry.isCarrying(CarryType.BLOCK)) + drawFirstPersonBlock(player, buffer, matrix, light, CarryRenderHelper.getRenderState(player)); + else if (carry.isCarrying(CarryType.ENTITY)) + drawFirstPersonEntity(player, buffer, matrix, light, partialTicks); + } + catch (Exception e) + { + //hehe + } if(carry.getActiveScript().isPresent()) { diff --git a/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java b/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java index c660263..a5565df 100644 --- a/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java +++ b/Common/src/main/java/tschipp/carryon/client/render/CarryRenderHelper.java @@ -316,7 +316,7 @@ public class CarryRenderHelper { BlockState state = getRenderState(player); VoxelShape shape = state.getShape(player.level, player.blockPosition()); - if(shape == null) + if(shape == null || shape.isEmpty()) return 1f; Optional ov = ModelOverrideHandler.getModelOverride(state, carry.getContentNbt()); if(ov.isPresent()) @@ -344,7 +344,7 @@ public class CarryRenderHelper { BlockState state = getRenderState(player); VoxelShape shape = state.getShape(player.level, player.blockPosition()); - if(shape == null) + if(shape == null || shape.isEmpty()) return 1f; Optional ov = ModelOverrideHandler.getModelOverride(state, carry.getContentNbt()); if(ov.isPresent()) 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 618f35e..39953c5 100644 --- a/Common/src/main/java/tschipp/carryon/common/config/ListHandler.java +++ b/Common/src/main/java/tschipp/carryon/common/config/ListHandler.java @@ -1,5 +1,6 @@ package tschipp.carryon.common.config; +import com.mojang.datafixers.kinds.Const; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; @@ -142,8 +143,6 @@ public class ListHandler { } } } - - } private static void addTag(String tag, Map> tagMap, List> tags) { diff --git a/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java b/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java index 62a4f42..b4f02df 100644 --- a/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java +++ b/Common/src/main/java/tschipp/carryon/mixin/InventoryMixin.java @@ -1,5 +1,7 @@ package tschipp.carryon.mixin; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.core.NonNullList; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -27,15 +29,15 @@ public class InventoryMixin @Shadow public NonNullList items; - @Redirect(method = "getFreeSlot()I", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/core/NonNullList;get(I)Ljava/lang/Object;")) - private E getFreeSlotEmptyCheck(NonNullList instance, int i) + @WrapOperation(method = "getFreeSlot()I", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/core/NonNullList;get(I)Ljava/lang/Object;")) + private Object getFreeSlotEmptyCheck(NonNullList instance, int slot, Operation original) { - if(i == selected && CarryOnDataManager.getCarryData(player).isCarrying()) + if(slot == selected && CarryOnDataManager.getCarryData(player).isCarrying()) { - return (E) DUMMY_STACK; + return DUMMY_STACK; } else - return instance.get(i); + return original.call(instance, slot); } @Inject(method = "setPickedItem(Lnet/minecraft/world/item/ItemStack;)V", at = @At("HEAD"), cancellable = true) diff --git a/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java b/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java index 3fca3fa..0603466 100644 --- a/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java +++ b/Common/src/main/java/tschipp/carryon/mixin/MinecraftMixin.java @@ -1,5 +1,6 @@ package tschipp.carryon.mixin; +import com.llamalad7.mixinextras.injector.WrapWithCondition; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.player.Inventory; import org.spongepowered.asm.mixin.Mixin; @@ -10,10 +11,9 @@ import tschipp.carryon.common.carry.CarryOnDataManager; @Mixin(Minecraft.class) public class MinecraftMixin { - @Redirect(method = "handleKeybinds()V", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/player/Inventory;selected:I", ordinal = 0, opcode = 181)) //Opcode for PUTFIELD - private void onSlotSelected(Inventory inv,int slot) + @WrapWithCondition(method = "handleKeybinds()V", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/player/Inventory;selected:I", ordinal = 0, opcode = 181)) //Opcode for PUTFIELD + private boolean allowSlotSelection(Inventory inv,int slot) { - if(!CarryOnDataManager.getCarryData(inv.player).isCarrying()) - inv.selected = slot; + return !CarryOnDataManager.getCarryData(inv.player).isCarrying(); } } diff --git a/Common/src/main/resources/carryon.mixins.json b/Common/src/main/resources/carryon.mixins.json index cf60e4a..90e488f 100644 --- a/Common/src/main/resources/carryon.mixins.json +++ b/Common/src/main/resources/carryon.mixins.json @@ -14,6 +14,7 @@ ], "server": [ ], + "plugin": "tschipp.carryon.mixin.CarryOnMixinConfigPlugin", "injectors": { "defaultRequire": 1 }, diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 529c6af..132adb3 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -14,6 +14,10 @@ if (project.hasProperty('secretFile')) { if (System.getenv('BUILD_NUMBER') != null) { version += "." + System.getenv('BUILD_NUMBER') } +repositories { + maven { url 'https://jitpack.io' } +} + dependencies { minecraft "com.mojang:minecraft:${minecraft_version}" @@ -25,6 +29,8 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}" implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' implementation project(":Common") + include implementation("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") + annotationProcessor("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") } loom { diff --git a/Fabric/src/main/java/tschipp/carryon/config/fabric/ConfigLoaderImpl.java b/Fabric/src/main/java/tschipp/carryon/config/fabric/ConfigLoaderImpl.java index 510d0c7..76a48ad 100644 --- a/Fabric/src/main/java/tschipp/carryon/config/fabric/ConfigLoaderImpl.java +++ b/Fabric/src/main/java/tschipp/carryon/config/fabric/ConfigLoaderImpl.java @@ -34,8 +34,6 @@ public class ConfigLoaderImpl { FileUtils.write(cfgFile, GSON.toJson(loadConfig(entry.getValue(), cfgJson)), StandardCharsets.UTF_8); } } - - ConfigLoader.onConfigLoaded(); } private static JsonObject loadConfig(BuiltCategory category, JsonObject config) { @@ -90,7 +88,6 @@ public class ConfigLoaderImpl { } } }); - ConfigLoader.onConfigLoaded(); return config; } diff --git a/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java b/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java index 41120f5..6b3fe2a 100644 --- a/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java +++ b/Fabric/src/main/java/tschipp/carryon/events/CommonEvents.java @@ -2,6 +2,7 @@ package tschipp.carryon.events; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.CommonLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.player.*; @@ -18,12 +19,18 @@ 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.config.ConfigLoader; import tschipp.carryon.scripting.IdentifiableScriptReloadListener; public class CommonEvents { public static void registerEvents() { + CommonLifecycleEvents.TAGS_LOADED.register((registries, client) -> { + if(!client) + ConfigLoader.onConfigLoaded(); + }); + UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { if(world.isClientSide) diff --git a/Fabric/src/main/java/tschipp/carryon/mixin/CarryOnMixinConfigPlugin.java b/Fabric/src/main/java/tschipp/carryon/mixin/CarryOnMixinConfigPlugin.java new file mode 100644 index 0000000..47675e2 --- /dev/null +++ b/Fabric/src/main/java/tschipp/carryon/mixin/CarryOnMixinConfigPlugin.java @@ -0,0 +1,46 @@ +package tschipp.carryon.mixin; + + +import com.llamalad7.mixinextras.MixinExtrasBootstrap; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class CarryOnMixinConfigPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + MixinExtrasBootstrap.init(); + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void postApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void preApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/Forge/build.gradle b/Forge/build.gradle index 89905cb..c686fd6 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -4,11 +4,13 @@ buildscript { maven { url = 'https://repo.spongepowered.org/repository/maven-public/' } maven { url = 'https://maven.parchmentmc.org' } mavenCentral() + gradlePluginPortal() } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' classpath 'org.parchmentmc:librarian:1.+' + classpath 'gradle.plugin.com.github.johnrengelman:shadow:7.1.2' } } apply plugin: 'java' @@ -17,6 +19,7 @@ apply plugin: 'eclipse' apply plugin: 'org.spongepowered.mixin' apply plugin: 'maven-publish' apply plugin: 'org.parchmentmc.librarian.forgegradle' +apply plugin: 'com.github.johnrengelman.shadow' apply from: 'https://raw.githubusercontent.com/MinecraftModDevelopment/Gradle-Collection/22e7d543a18cd30675277fbfa3669e3d9e206010/generic/secrets.gradle' @@ -97,6 +100,11 @@ minecraft { sourceSets.main.resources.srcDir 'src/generated/resources' +configurations { + shade + implementation.extendsFrom shade +} + repositories { maven { url 'https://maven.blamejared.com' @@ -104,14 +112,19 @@ repositories { flatDir { dirs 'libs' } + maven { url 'https://jitpack.io' } + } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" compileOnly project(":Common") + minecraftLibrary("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") + annotationProcessor("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") //implementation fg.deobf("net.darkhax.gamestages:GameStages-Forge-1.19.2:11.0.2") //implementation fg.deobf("net.darkhax.bookshelf:Bookshelf-Forge-1.19.3:17.0.2") annotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' + shade("com.github.LlamaLad7:MixinExtras:${mixinextras_version}") fileTree("libs").matching { include "*.jar" @@ -124,6 +137,19 @@ dependencies { } } +shadowJar { + configurations = [project.configurations.shade] + relocate 'com.github.llamalad7.mixinextras', 'tschipp.carryon.shaded.mixinextras' + finalizedBy 'reobfShadowJar' + classifier = "" +} + +assemble.dependsOn shadowJar + +reobf { + shadowJar {} +} + tasks.withType(JavaCompile) { source(project(":Common").sourceSets.main.allSource) } diff --git a/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java b/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java index e0e515d..29018c9 100644 --- a/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java +++ b/Forge/src/main/java/tschipp/carryon/events/CommonEvents.java @@ -110,9 +110,9 @@ public class CommonEvents CarryOnData carry = CarryOnDataManager.getCarryData(player); if (!carry.isCarrying()) { if (PickupHandler.tryPickupEntity((ServerPlayer) player, target, (toPickup) -> { - AttackEntityEvent attackEvent = new AttackEntityEvent(player, toPickup); - MinecraftForge.EVENT_BUS.post(attackEvent); - return !attackEvent.isCanceled(); + EntityPickupEvent pickupEvent = new EntityPickupEvent((ServerPlayer) player, toPickup); + MinecraftForge.EVENT_BUS.post(pickupEvent); + return !pickupEvent.isCanceled(); })) { event.setResult(Result.DENY); event.setCancellationResult(InteractionResult.SUCCESS); diff --git a/Forge/src/main/java/tschipp/carryon/events/EntityPickupEvent.java b/Forge/src/main/java/tschipp/carryon/events/EntityPickupEvent.java new file mode 100644 index 0000000..473f418 --- /dev/null +++ b/Forge/src/main/java/tschipp/carryon/events/EntityPickupEvent.java @@ -0,0 +1,18 @@ +package tschipp.carryon.events; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; + +@Cancelable +public class EntityPickupEvent extends Event { + + public final ServerPlayer player; + public final Entity target; + + public EntityPickupEvent(ServerPlayer player, Entity target) { + this.player = player; + this.target = target; + } +} diff --git a/Forge/src/main/java/tschipp/carryon/mixin/CarryOnMixinConfigPlugin.java b/Forge/src/main/java/tschipp/carryon/mixin/CarryOnMixinConfigPlugin.java new file mode 100644 index 0000000..47675e2 --- /dev/null +++ b/Forge/src/main/java/tschipp/carryon/mixin/CarryOnMixinConfigPlugin.java @@ -0,0 +1,46 @@ +package tschipp.carryon.mixin; + + +import com.llamalad7.mixinextras.MixinExtrasBootstrap; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class CarryOnMixinConfigPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + MixinExtrasBootstrap.init(); + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void postApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void preApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/gradle.properties b/gradle.properties index 408851f..2067c5a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project -version=2.0.2 +version=2.0.3 group=tschipp.carryon # Common @@ -30,3 +30,5 @@ mod_id=carryon # Gradle org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false + +mixinextras_version=0.2.0-beta.1 diff --git a/settings.gradle b/settings.gradle index 1e39e36..6cbeebc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,6 +9,9 @@ pluginManagement { name = 'Sponge Snapshots' url = 'https://repo.spongepowered.org/repository/maven-public/' } + + maven { url 'https://jitpack.io' } + maven { name = 'ParchmentMC' url = 'https://maven.parchmentmc.org'