diff options
| author | Anthony Hilyard <anthony.hilyard@gmail.com> | 2021-10-24 11:46:40 -0700 |
|---|---|---|
| committer | Anthony Hilyard <anthony.hilyard@gmail.com> | 2021-10-24 11:46:40 -0700 |
| commit | ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3 (patch) | |
| tree | 7f46aca691a09d9df9140505403a647827011df6 /src/main/java/com | |
| parent | 2b38fda32d059303bed929b7ae634efa4dffc706 (diff) | |
| download | Iceberg-ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3.tar.gz Iceberg-ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3.tar.bz2 Iceberg-ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3.zip | |
Initial Fabric port.
Diffstat (limited to 'src/main/java/com')
22 files changed, 617 insertions, 703 deletions
diff --git a/src/main/java/com/anthonyhilyard/iceberg/IcebergClient.java b/src/main/java/com/anthonyhilyard/iceberg/IcebergClient.java index 3a860a2..6361d20 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/IcebergClient.java +++ b/src/main/java/com/anthonyhilyard/iceberg/IcebergClient.java @@ -1,26 +1,12 @@ package com.anthonyhilyard.iceberg; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.fabricmc.api.ClientModInitializer; -@Mod.EventBusSubscriber(modid = Loader.MODID, bus = Bus.MOD, value = Dist.CLIENT) -public class IcebergClient +public class IcebergClient implements ClientModInitializer { - public IcebergClient() + @Override + public void onInitializeClient() { - } - - public void onClientSetup(FMLClientSetupEvent event) - { - event.enqueueWork(new Runnable() - { - @Override - public void run() - { - - } - }); + } } diff --git a/src/main/java/com/anthonyhilyard/iceberg/IcebergServer.java b/src/main/java/com/anthonyhilyard/iceberg/IcebergServer.java index 4ad4e48..227da6f 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/IcebergServer.java +++ b/src/main/java/com/anthonyhilyard/iceberg/IcebergServer.java @@ -1,13 +1,12 @@ package com.anthonyhilyard.iceberg; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.fabricmc.api.DedicatedServerModInitializer; -@Mod.EventBusSubscriber(modid = Loader.MODID, bus = Bus.MOD, value = Dist.DEDICATED_SERVER) -public class IcebergServer +public class IcebergServer implements DedicatedServerModInitializer { - public IcebergServer() + @Override + public void onInitializeServer() { + } } diff --git a/src/main/java/com/anthonyhilyard/iceberg/Loader.java b/src/main/java/com/anthonyhilyard/iceberg/Loader.java index 49e9d9c..d8c3af5 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/Loader.java +++ b/src/main/java/com/anthonyhilyard/iceberg/Loader.java @@ -1,47 +1,18 @@ package com.anthonyhilyard.iceberg; -import com.anthonyhilyard.iceberg.network.IcebergNetworkProtocol; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.IExtensionPoint; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLEnvironment; +import net.fabricmc.api.ModInitializer; -@Mod(Loader.MODID) -public class Loader +public class Loader implements ModInitializer { public static final String MODID = "iceberg"; public static final Logger LOGGER = LogManager.getLogger(MODID); - public Loader() + @Override + public void onInitialize() { - if (FMLEnvironment.dist == Dist.CLIENT) - { - IcebergClient mod = new IcebergClient(); - FMLJavaModLoadingContext.get().getModEventBus().addListener(mod::onClientSetup); - } - else - { - new IcebergServer(); - } - - // Register the network protocol. - IcebergNetworkProtocol.register(); - - ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> "ANY", (remote, isServer) -> true)); - } - - @SubscribeEvent - public void onCommonSetup(FMLCommonSetupEvent event) - { - } // Event testing. diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java b/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java new file mode 100644 index 0000000..f46f082 --- /dev/null +++ b/src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java @@ -0,0 +1,23 @@ +package com.anthonyhilyard.iceberg.events; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.advancements.Advancement; +import net.minecraft.world.entity.player.Player; + +/** + * This event is fired when a player is granted an advancement criterion. + */ +public interface CriterionCallback +{ + Event<CriterionCallback> EVENT = EventFactory.createArrayBacked(CriterionCallback.class, + (listeners) -> (player, advancement, criterionKey) -> { + for (CriterionCallback listener : listeners) + { + listener.awardCriterion(player, advancement, criterionKey); + } + } + ); + + public void awardCriterion(Player player, Advancement advancement, String criterionKey); +} diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/CriterionEvent.java b/src/main/java/com/anthonyhilyard/iceberg/events/CriterionEvent.java deleted file mode 100644 index fed7ec2..0000000 --- a/src/main/java/com/anthonyhilyard/iceberg/events/CriterionEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.anthonyhilyard.iceberg.events; - -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraft.advancements.Advancement; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.MinecraftForge; - -/** - * This event is fired when a player is granted an advancement criterion. - * <br> - * This event is not {@link net.minecraftforge.eventbus.api.Cancelable}.<br> - * <br> - * This event does not have a result. {@link HasResult}<br> - * <br> - * This event is fired on the {@link MinecraftForge#EVENT_BUS}. - */ -public class CriterionEvent extends PlayerEvent -{ - private final Advancement advancement; - private final String criterionKey; - - public CriterionEvent(Player player, Advancement advancement, String criterionKey) - { - super(player); - this.advancement = advancement; - this.criterionKey = criterionKey; - } - - public Advancement getAdvancement() - { - return advancement; - } - - public String getCriterionKey() - { - return criterionKey; - } -} diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvent.java b/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvent.java deleted file mode 100644 index d2abcb2..0000000 --- a/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvent.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.anthonyhilyard.iceberg.events; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.event.entity.EntityEvent; - -public class EntityFluidEvent extends EntityEvent -{ - private final Fluid fluid; - - private EntityFluidEvent(Entity entity, Fluid fluid) - { - super(entity); - this.fluid = fluid; - } - - public Fluid getFluid() - { - return fluid; - } - - /** - * This event is fired when an entity enters a fluid to at least eye-level. - * If this is a player, they will see the "submerged in fluid" effect at this point. - * <br> - * This event is not {@link net.minecraftforge.eventbus.api.Cancelable}.<br> - * <br> - * This event does not have a result. {@link HasResult}<br> - * <br> - * This event is fired on the {@link MinecraftForge#EVENT_BUS}. - */ - public static class Entered extends EntityFluidEvent - { - public Entered(Entity entity, Fluid fluid) - { - super(entity, fluid); - } - } - - /** - * This event is fired when an entity was previously submerged in a fluid to at least eye-level and no longer are. - * If this is a player, they will no longer see the "submerged in fluid" effect at this point. - * <br> - * This event is not {@link net.minecraftforge.eventbus.api.Cancelable}.<br> - * <br> - * This event does not have a result. {@link HasResult}<br> - * <br> - * This event is fired on the {@link MinecraftForge#EVENT_BUS}. - */ - public static class Exited extends EntityFluidEvent - { - public Exited(Entity entity, Fluid fluid) - { - super(entity, fluid); - } - } -} diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java b/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java new file mode 100644 index 0000000..3ffea9a --- /dev/null +++ b/src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java @@ -0,0 +1,44 @@ +package com.anthonyhilyard.iceberg.events; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.material.Fluid; + + +public final class EntityFluidEvents +{ + public EntityFluidEvents() { } + + /** + * Called when an Entity enters a new fluid. + */ + public static final Event<EntityFluidEvents.Entered> ENTERED = EventFactory.createArrayBacked(EntityFluidEvents.Entered.class, callbacks -> (entity, fluid) -> { + for (EntityFluidEvents.Entered callback : callbacks) + { + callback.onEntered(entity, fluid); + } + }); + + /** + * Called when an Entity exits a fluid. + */ + public static final Event<EntityFluidEvents.Exited> EXITED = EventFactory.createArrayBacked(EntityFluidEvents.Exited.class, callbacks -> (entity, fluid) -> { + for (EntityFluidEvents.Exited callback : callbacks) + { + callback.onExited(entity, fluid); + } + }); + + @FunctionalInterface + public interface Entered + { + void onEntered(Entity entity, Fluid fluid); + } + + @FunctionalInterface + public interface Exited + { + void onExited(Entity entity, Fluid fluid); + } +}
\ No newline at end of file diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupCallback.java b/src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupCallback.java new file mode 100644 index 0000000..5f56eb9 --- /dev/null +++ b/src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupCallback.java @@ -0,0 +1,24 @@ +package com.anthonyhilyard.iceberg.events; + +import java.util.UUID; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.world.item.ItemStack; + +/** + * This event is fired right before a player picks up a new item. This event fires on the logical client. + */ +public interface NewItemPickupCallback +{ + Event<NewItemPickupCallback> EVENT = EventFactory.createArrayBacked(NewItemPickupCallback.class, + (listeners) -> (playerUUID, itemStack) -> { + for (NewItemPickupCallback listener : listeners) + { + listener.onItemPickup(playerUUID, itemStack); + } + } + ); + + public void onItemPickup(UUID playerUUID, ItemStack itemStack); +}
\ No newline at end of file diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupEvent.java b/src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupEvent.java deleted file mode 100644 index 48f2faf..0000000 --- a/src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.anthonyhilyard.iceberg.events; - -import net.minecraftforge.event.entity.player.PlayerEvent; - -import java.util.UUID; - -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.MinecraftForge; - -/** - * This event is fired right before a player picks up a new item. Unlike EntityItemPickupEvent, this event fires on the logical client. - * <br> - * This event is not {@link net.minecraftforge.eventbus.api.Cancelable}.<br> - * <br> - * This event does not have a result. {@link HasResult}<br> - * <br> - * This event is fired on the {@link MinecraftForge#EVENT_BUS}. - */ -public class NewItemPickupEvent extends PlayerEvent -{ - private final ItemStack itemStack; - - public NewItemPickupEvent(Player player, ItemStack itemStack) - { - super(player); - this.itemStack = itemStack; - } - - @SuppressWarnings("resource") - public NewItemPickupEvent(UUID playerUUID, ItemStack itemStack) - { - this(Minecraft.getInstance().level.getPlayerByUUID(playerUUID), itemStack); - } - - public ItemStack getItemStack() - { - return itemStack; - } -} diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipEvents.java b/src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipEvents.java new file mode 100644 index 0000000..1ef654d --- /dev/null +++ b/src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipEvents.java @@ -0,0 +1,65 @@ +package com.anthonyhilyard.iceberg.events; + +import java.util.List; + +import com.mojang.blaze3d.vertex.PoseStack; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.ItemStack; + +public final class RenderTooltipEvents +{ + public RenderTooltipEvents() { } + + public static final Event<RenderTooltipEvents.Pre> PRE = EventFactory.createArrayBacked(RenderTooltipEvents.Pre.class, + callbacks -> (stack, components, poseStack, x, y, screenWidth, screenHeight, maxWidth, font, comparison) -> { + for (RenderTooltipEvents.Pre callback : callbacks) + { + InteractionResult result = callback.onPre(stack, components, poseStack, x, y, screenWidth, screenHeight, maxWidth, font, comparison); + + if (result != InteractionResult.PASS) + { + return result; + } + } + return InteractionResult.PASS; + }); + + public static final Event<RenderTooltipEvents.Color> COLOR = EventFactory.createArrayBacked(RenderTooltipEvents.Color.class, + callbacks -> (stack, components, poseStack, x, y, font, background, borderStart, borderEnd, comparison) -> { + for (RenderTooltipEvents.Color callback : callbacks) + { + callback.onColor(stack, components, poseStack, x, y, font, background, borderStart, borderEnd, comparison); + } + }); + + public static final Event<RenderTooltipEvents.Post> POST = EventFactory.createArrayBacked(RenderTooltipEvents.Post.class, + callbacks -> (stack, components, poseStack, x, y, font, width, height, comparison) -> { + for (RenderTooltipEvents.Post callback : callbacks) + { + callback.onPost(stack, components, poseStack, x, y, font, width, height, comparison); + } + }); + + @FunctionalInterface + public interface Pre + { + InteractionResult onPre(ItemStack stack, List<ClientTooltipComponent> components, PoseStack poseStack, int x, int y, int screenWidth, int screenHeight, int maxWidth, Font font, boolean comparison); + } + + @FunctionalInterface + public interface Color + { + void onColor(ItemStack stack, List<ClientTooltipComponent> components, PoseStack poseStack, int x, int y, Font font, int background, int borderStart, int borderEnd, boolean comparison); + } + + @FunctionalInterface + public interface Post + { + void onPost(ItemStack stack, List<ClientTooltipComponent> components, PoseStack poseStack, int x, int y, Font font, int width, int height, boolean comparison); + } +} diff --git a/src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipExtEvent.java b/src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipExtEvent.java deleted file mode 100644 index 3ca2d37..0000000 --- a/src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipExtEvent.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.anthonyhilyard.iceberg.events; - -import java.util.List; - -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.gui.Font; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.chat.FormattedText; -import net.minecraftforge.client.event.RenderTooltipEvent; - -public class RenderTooltipExtEvent -{ - public static class Pre extends RenderTooltipEvent.Pre - { - private boolean comparisonTooltip = false; - - @SuppressWarnings("removal") - public Pre(ItemStack stack, List<? extends FormattedText> lines, PoseStack PoseStack, int x, int y, int screenWidth, int screenHeight, int maxWidth, Font font, boolean comparison) - { - super(stack, lines, PoseStack, x, y, screenWidth, screenHeight, maxWidth, font); - comparisonTooltip = comparison; - } - public boolean isComparison() { return comparisonTooltip; } - } - - @SuppressWarnings("removal") - public static class PostBackground extends RenderTooltipEvent.PostBackground - { - private boolean comparisonTooltip = false; - - public PostBackground(ItemStack stack, List<? extends FormattedText> textLines, PoseStack PoseStack, int x, int y, Font font, int width, int height, boolean comparison) - { - super(stack, textLines, PoseStack, x, y, font, width, height); - comparisonTooltip = comparison; - } - public boolean isComparison() { return comparisonTooltip; } - } - - @SuppressWarnings("removal") - public static class PostText extends RenderTooltipEvent.PostText - { - private boolean comparisonTooltip = false; - - public PostText(ItemStack stack, List<? extends FormattedText> textLines, PoseStack PoseStack, int x, int y, Font font, int width, int height, boolean comparison) - { - super(stack, textLines, PoseStack, x, y, font, width, height); - comparisonTooltip = comparison; - } - public boolean isComparison() { return comparisonTooltip; } - } - - public static class Color extends RenderTooltipEvent.Color - { - private boolean comparisonTooltip = false; - - @SuppressWarnings("removal") - public Color(ItemStack stack, List<? extends FormattedText> textLines, PoseStack PoseStack, int x, int y, Font font, int background, int borderStart, int borderEnd, boolean comparison) - { - super(stack, textLines, PoseStack, x, y, font, background, borderStart, borderEnd); - comparisonTooltip = comparison; - } - public boolean isComparison() { return comparisonTooltip; } - } -} diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java index ba3a69e..5d02156 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java +++ b/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java @@ -2,7 +2,7 @@ package com.anthonyhilyard.iceberg.mixin; import java.util.Objects; -import com.anthonyhilyard.iceberg.events.EntityFluidEvent; +import com.anthonyhilyard.iceberg.events.EntityFluidEvents; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -14,18 +14,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.material.Fluid; import net.minecraft.tags.Tag; -import net.minecraftforge.common.MinecraftForge; @Mixin(Entity.class) -public class EntityMixin extends net.minecraftforge.common.capabilities.CapabilityProvider<Entity> +public class EntityMixin { private Fluid previousFluidOnEyes = null; @Shadow protected Tag<Fluid> fluidOnEyes; - protected EntityMixin(Class<Entity> baseClass) { super(baseClass); } - @Inject(method = "updateFluidOnEyes", at = @At(value = "RETURN")) public void onUpdateFluidOnEyes(CallbackInfo callbackInfo) { @@ -38,7 +35,7 @@ public class EntityMixin extends net.minecraftforge.common.capabilities.Capabili // We were submerged in a fluid that we no longer are. if (previousFluidOnEyes != null) { - MinecraftForge.EVENT_BUS.post(new EntityFluidEvent.Exited((Entity)(Object)this, previousFluidOnEyes)); + EntityFluidEvents.EXITED.invoker().onExited((Entity)(Object)this, previousFluidOnEyes); } previousFluidOnEyes = null; } @@ -59,7 +56,7 @@ public class EntityMixin extends net.minecraftforge.common.capabilities.Capabili // We are now submerged in a fluid that doesn't match the previous one. if (currentFluid != null) { - MinecraftForge.EVENT_BUS.post(new EntityFluidEvent.Entered((Entity)(Object)this, currentFluid)); + EntityFluidEvents.ENTERED.invoker().onEntered((Entity)(Object)this, currentFluid); } } } diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/ForgeEventFactoryMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/ForgeEventFactoryMixin.java deleted file mode 100644 index 2dbc247..0000000 --- a/src/main/java/com/anthonyhilyard/iceberg/mixin/ForgeEventFactoryMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.anthonyhilyard.iceberg.mixin; - -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fmllegacy.network.PacketDistributor; - -import com.anthonyhilyard.iceberg.network.IcebergNetworkProtocol; -import com.anthonyhilyard.iceberg.network.NewItemPickupEventPacket; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ForgeEventFactory.class) -public class ForgeEventFactoryMixin -{ - @Inject(method = { "onItemPickup(Lnet/minecraft/world/entity/item/ItemEntity;Lnet/minecraft/world/entity/player/Player;)I" }, - at = { @At("HEAD") }, remap = false) - private static void onItemPickup(ItemEntity entityItem, Player player, CallbackInfoReturnable<Integer> info) - { - if (player instanceof ServerPlayer && FMLEnvironment.dist.isDedicatedServer()) - { - IcebergNetworkProtocol.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer)player), new NewItemPickupEventPacket(player.getUUID(), entityItem.getItem())); - } - } -} diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/ItemEntityMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/ItemEntityMixin.java new file mode 100644 index 0000000..05540c9 --- /dev/null +++ b/src/main/java/com/anthonyhilyard/iceberg/mixin/ItemEntityMixin.java @@ -0,0 +1,28 @@ +package com.anthonyhilyard.iceberg.mixin; + +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; + +import com.anthonyhilyard.iceberg.network.IcebergNetworkProtocol; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemEntity.class) +public class ItemEntityMixin +{ + @Inject(method = { "playerTouch" }, + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;take(Lnet/minecraft/world/entity/Entity;I)V", ordinal = 0, shift = Shift.AFTER)) + private void onPlayerTouch(Player player, CallbackInfo info) + { + if (player instanceof ServerPlayer) + { + IcebergNetworkProtocol.sendItemPickupEvent((ServerPlayer)player, ((ItemEntity)(Object)this).getItem()); + } + } +} diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/PlayerAdvancementsMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/PlayerAdvancementsMixin.java index ad52b94..568036e 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/mixin/PlayerAdvancementsMixin.java +++ b/src/main/java/com/anthonyhilyard/iceberg/mixin/PlayerAdvancementsMixin.java @@ -1,6 +1,6 @@ package com.anthonyhilyard.iceberg.mixin; -import com.anthonyhilyard.iceberg.events.CriterionEvent; +import com.anthonyhilyard.iceberg.events.CriterionCallback; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -12,7 +12,6 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import net.minecraft.advancements.Advancement; import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.common.MinecraftForge; @Mixin(PlayerAdvancements.class) public class PlayerAdvancementsMixin @@ -25,7 +24,7 @@ public class PlayerAdvancementsMixin { if (success) { - MinecraftForge.EVENT_BUS.post(new CriterionEvent(player, advancement, criterionKey)); + CriterionCallback.EVENT.invoker().awardCriterion(player, advancement, criterionKey); } } } diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java index bbd2d6b..225499f 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java +++ b/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java @@ -2,7 +2,7 @@ package com.anthonyhilyard.iceberg.mixin; import java.util.List; -import com.anthonyhilyard.iceberg.util.StringRecomposer; +import com.anthonyhilyard.iceberg.events.RenderTooltipEvents; import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; @@ -19,11 +19,10 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.client.event.RenderTooltipEvent; -import net.minecraftforge.common.MinecraftForge; @Mixin(Screen.class) public class ScreenMixin extends AbstractContainerEventHandler @@ -31,25 +30,23 @@ public class ScreenMixin extends AbstractContainerEventHandler @Shadow protected Font font = null; - @Shadow(remap = false) - private Font tooltipFont = null; - - @Shadow(remap = false) - private ItemStack tooltipStack = ItemStack.EMPTY; - @Final @Shadow private final List<GuiEventListener> children = Lists.newArrayList(); - @SuppressWarnings("removal") + @SuppressWarnings("unchecked") @Inject(method = "renderTooltipInternal", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;blitOffset:F", ordinal = 2, shift = Shift.AFTER), locals = LocalCapture.CAPTURE_FAILEXCEPTION) - private void renderTooltipInternal(PoseStack poseStack, List<ClientTooltipComponent> components, int x, int y, CallbackInfo info, RenderTooltipEvent.Pre pre, int tooltipWidth, int tooltipHeight, int postX, int postY) + private void renderTooltipInternal(PoseStack poseStack, List<ClientTooltipComponent> components, int x, int y, CallbackInfo info, int tooltipWidth, int tooltipHeight, int postX, int postY) { if (!components.isEmpty()) { - MinecraftForge.EVENT_BUS.post(new RenderTooltipEvent.PostText(tooltipStack, StringRecomposer.recompose(components), poseStack, postX, postY, ForgeHooksClient.getTooltipFont(tooltipFont, tooltipStack, font), tooltipWidth, tooltipHeight)); + if ((Screen)(Object)this instanceof AbstractContainerScreen) + { + ItemStack tooltipStack = ((AbstractContainerScreen<AbstractContainerMenu>)(Object)this).hoveredSlot.getItem(); + RenderTooltipEvents.POST.invoker().onPost(tooltipStack, components, poseStack, x, y, font, tooltipWidth, tooltipHeight, false); + } } } diff --git a/src/main/java/com/anthonyhilyard/iceberg/network/IcebergNetworkProtocol.java b/src/main/java/com/anthonyhilyard/iceberg/network/IcebergNetworkProtocol.java index 4b5db06..232ed7b 100644 --- a/src/main/java/com/anthonyhilyard/iceberg/network/IcebergNetworkProtocol.java +++ b/src/main/java/com/anthonyhilyard/iceberg/network/IcebergNetworkProtocol.java @@ -2,29 +2,49 @@ package com.anthonyhilyard.iceberg.network; import com.anthonyhilyard.iceberg.Loader; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.fmllegacy.network.NetworkRegistry; -import net.minecraftforge.fmllegacy.network.simple.SimpleChannel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; +// import net.minecraftforge.fmllegacy.network.NetworkRe |
