aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
authorAnthony Hilyard <anthony.hilyard@gmail.com>2021-10-24 11:46:40 -0700
committerAnthony Hilyard <anthony.hilyard@gmail.com>2021-10-24 11:46:40 -0700
commitec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3 (patch)
tree7f46aca691a09d9df9140505403a647827011df6 /src/main/java/com
parent2b38fda32d059303bed929b7ae634efa4dffc706 (diff)
downloadIceberg-ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3.tar.gz
Iceberg-ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3.tar.bz2
Iceberg-ec4c5aebf3b5b5af872c6b168c02bedd2bd5a9e3.zip
Initial Fabric port.
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/IcebergClient.java24
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/IcebergServer.java11
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/Loader.java37
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/CriterionCallback.java23
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/CriterionEvent.java38
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvent.java57
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/EntityFluidEvents.java44
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupCallback.java24
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/NewItemPickupEvent.java41
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipEvents.java65
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/events/RenderTooltipExtEvent.java65
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java11
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/ForgeEventFactoryMixin.java31
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/ItemEntityMixin.java28
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/PlayerAdvancementsMixin.java5
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java23
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/network/IcebergNetworkProtocol.java54
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/network/NewItemPickupEventPacket.java45
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/registry/AutoRegistry.java373
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/registry/RendererRegistrar.java62
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/util/GuiHelper.java16
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/util/Tooltips.java243
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