diff --git a/common/src/main/java/muramasa/antimatter/Antimatter.java b/common/src/main/java/muramasa/antimatter/Antimatter.java index f06fddadf..ccdaa89fb 100644 --- a/common/src/main/java/muramasa/antimatter/Antimatter.java +++ b/common/src/main/java/muramasa/antimatter/Antimatter.java @@ -2,6 +2,7 @@ import muramasa.antimatter.client.AntimatterModelManager; import muramasa.antimatter.client.ClientData; +import muramasa.antimatter.common.event.CommonEvents; import muramasa.antimatter.cover.ICover; import muramasa.antimatter.data.AntimatterDefaultTools; import muramasa.antimatter.data.AntimatterMaterialTypes; @@ -21,9 +22,11 @@ import muramasa.antimatter.item.interaction.CauldronInteractions; import muramasa.antimatter.machine.MachineState; import muramasa.antimatter.material.*; +import muramasa.antimatter.mixin.LivingEntityAccessor; import muramasa.antimatter.network.AntimatterNetwork; import muramasa.antimatter.ore.BlockOre; import muramasa.antimatter.ore.StoneType; +import muramasa.antimatter.pipe.BlockFluidPipe; import muramasa.antimatter.proxy.ClientHandler; import muramasa.antimatter.proxy.IProxyHandler; import muramasa.antimatter.proxy.ServerHandler; @@ -44,6 +47,7 @@ import muramasa.antimatter.worldgen.AntimatterWorldGenerator; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; @@ -154,6 +158,11 @@ public void onRegistrationEvent(RegistrationEvent event, Side side) { AntimatterRecipeSerializer.init(); IngredientSerializer.init(); PropertyIngredient.Serializer.init(); + CommonEvents.addPlayerTickCallback((end, logicalServer, player) -> { + if (end && logicalServer && !player.isCreative() && player.getInventory().contains(AntimatterMaterialTypes.INGOT_HOT.getTag())){ + BlockFluidPipe.applyTemperatureDamage(player, 1700, 1.0f, 1.0f); + } + }); } else if (event == RegistrationEvent.WORLDGEN_INIT) { AntimatterWorldGenerator.init(); AntimatterDefaultTools.postInit(); diff --git a/common/src/main/java/muramasa/antimatter/common/event/CommonEvents.java b/common/src/main/java/muramasa/antimatter/common/event/CommonEvents.java index 4600ea862..ec2cdf0dc 100644 --- a/common/src/main/java/muramasa/antimatter/common/event/CommonEvents.java +++ b/common/src/main/java/muramasa/antimatter/common/event/CommonEvents.java @@ -1,5 +1,6 @@ package muramasa.antimatter.common.event; +import lombok.Getter; import muramasa.antimatter.AntimatterAPI; import muramasa.antimatter.AntimatterConfig; import muramasa.antimatter.blockentity.pipe.BlockEntityPipe; @@ -33,7 +34,18 @@ import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import java.util.ArrayList; +import java.util.List; + public class CommonEvents { + @Getter + static final List PLAYER_TICK_CALLBACKS = new ArrayList<>(); + + public static void addPlayerTickCallback(PlayerTickCallback callback){ + PLAYER_TICK_CALLBACKS.add(callback); + } + + public static void lootTableLoad(LootTable table, ResourceLocation name){ if (AntimatterPlatformUtils.getLootTableID(table).getPath().startsWith("blocks/")) { ResourceLocation blockId = new ResourceLocation(AntimatterPlatformUtils.getLootTableID(table).getNamespace(), name.getPath().replace("blocks/", "")); @@ -110,4 +122,8 @@ public static void tagsEvent() { AntimatterDynamics.onRecipeCompile(true, Minecraft.getInstance().getConnection().getRecipeManager()); } } + + public interface PlayerTickCallback{ + void onTick(boolean end, boolean logicalServer, Player player); + } } diff --git a/common/src/main/java/muramasa/antimatter/mixin/LivingEntityAccessor.java b/common/src/main/java/muramasa/antimatter/mixin/LivingEntityAccessor.java new file mode 100644 index 000000000..b767b8699 --- /dev/null +++ b/common/src/main/java/muramasa/antimatter/mixin/LivingEntityAccessor.java @@ -0,0 +1,12 @@ +package muramasa.antimatter.mixin; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(LivingEntity.class) +public interface LivingEntityAccessor { + @Accessor + BlockPos getLastPos(); +} diff --git a/common/src/main/resources/antimatter.mixins.json b/common/src/main/resources/antimatter.mixins.json index 54b33a23f..fa4c03ef7 100644 --- a/common/src/main/resources/antimatter.mixins.json +++ b/common/src/main/resources/antimatter.mixins.json @@ -31,6 +31,7 @@ "IngredientAccessor", "ItemStackMixin", "LeavesBlockMixin", + "LivingEntityAccessor", "PlayerMixin", "RecipeManagerMixin", "RepairItemRecipeMixin", diff --git a/fabric/src/main/java/muramasa/antimatter/fabric/AntimatterImpl.java b/fabric/src/main/java/muramasa/antimatter/fabric/AntimatterImpl.java index 9213b3ffe..6b1e6971e 100644 --- a/fabric/src/main/java/muramasa/antimatter/fabric/AntimatterImpl.java +++ b/fabric/src/main/java/muramasa/antimatter/fabric/AntimatterImpl.java @@ -4,6 +4,7 @@ import earth.terrarium.botarium.fabric.fluid.storage.FabricBlockFluidContainer; import io.github.fabricators_of_create.porting_lib.event.common.BlockPlaceCallback; import io.github.fabricators_of_create.porting_lib.event.common.ItemCraftedCallback; +import io.github.fabricators_of_create.porting_lib.event.common.PlayerTickEvents; import muramasa.antimatter.Antimatter; import muramasa.antimatter.AntimatterAPI; import muramasa.antimatter.Ref; @@ -40,6 +41,7 @@ import net.fabricmc.fabric.api.transfer.v1.item.ItemStorage; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; @@ -78,6 +80,8 @@ public void initialize(boolean run){ CommonEvents.placeBlock(placedOff, context.getPlayer(), context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos())); return InteractionResult.PASS; }); + PlayerTickEvents.START.register(player -> CommonEvents.getPLAYER_TICK_CALLBACKS().forEach(c -> c.onTick(false, player instanceof ServerPlayer, player))); + PlayerTickEvents.END.register(player -> CommonEvents.getPLAYER_TICK_CALLBACKS().forEach(c -> c.onTick(true, player instanceof ServerPlayer, player))); RRPCallback.AFTER_VANILLA.register(resources -> AntimatterDynamics.addResourcePacks(resources::add)); RRPCallback.BEFORE_USER.register(resources -> AntimatterDynamics.addDataPacks(resources::add)); Antimatter.LOGGER.info("initializing"); diff --git a/forge/src/main/java/muramasa/antimatter/common/event/forge/ForgeCommonEvents.java b/forge/src/main/java/muramasa/antimatter/common/event/forge/ForgeCommonEvents.java index 089595600..cf68c2476 100644 --- a/forge/src/main/java/muramasa/antimatter/common/event/forge/ForgeCommonEvents.java +++ b/forge/src/main/java/muramasa/antimatter/common/event/forge/ForgeCommonEvents.java @@ -28,6 +28,7 @@ import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.server.ServerLifecycleHooks; @@ -74,6 +75,13 @@ public static void onLootTableLoad(LootTableLoadEvent event) { CommonEvents.lootTableLoad(event.getTable(), event.getName()); } + @SubscribeEvent + public static void onPlayerTick(TickEvent.PlayerTickEvent event){ + CommonEvents.getPLAYER_TICK_CALLBACKS().forEach(c -> { + c.onTick(event.phase == TickEvent.Phase.END, event.side == LogicalSide.SERVER, event.player); + }); + } + @SubscribeEvent public static void remapMissingBlocks(final RegistryEvent.MissingMappings event) { for (String modid : AntimatterRemapping.getRemappingMap().keySet()) {