From 6014fab4db33d09258515482ab260e058d8dd5e3 Mon Sep 17 00:00:00 2001 From: ferriarnus <61201275+ferriarnus@users.noreply.github.com> Date: Sat, 11 Oct 2025 17:04:37 +0200 Subject: [PATCH] rework travel api to be POI instead --- .../upgrades/travel/TravelUpgrade.java | 6 +- .../enderio/api/EnderIORegistries.java | 12 +- .../com/enderio/enderio/api/poi/EnderPOI.java | 32 ++++++ .../enderio/enderio/api/poi/EnderPOIApi.java | 19 ++++ .../EnderPOISerializer.java} | 4 +- .../enderio/enderio/api/poi/EnderPOIType.java | 15 +++ .../enderio/enderio/api/poi/POIRenderer.java | 8 ++ .../poi/RegisterEnderPOIRenderersEvent.java | 24 ++++ .../api/{travel => poi}/package-info.java | 2 +- .../travel/RegisterTravelRenderersEvent.java | 24 ---- .../enderio/api/travel/TravelRenderer.java | 8 -- .../enderio/api/travel/TravelTarget.java | 71 ------------ .../enderio/api/travel/TravelTargetApi.java | 19 ---- .../enderio/api/travel/TravelTargetType.java | 15 --- .../enderio/enderio/client/EnderIOClient.java | 4 +- .../content/enderface/EnderfaceRenderer.java | 8 +- .../content/enderface/package-info.java | 4 + .../machines/gui/screen/EnderfaceScreen.java | 6 +- .../content/travel/TravelAnchorHud.java | 4 +- .../content/travel/TravelAnchorRenderer.java | 4 +- .../travel/TravelClientEventHandler.java | 24 ++-- .../content/travel/TravelTargetRendering.java | 26 ++--- .../content/enderface/EnderfaceBlock.java | 10 +- .../enderface/EnderfaceBlockEntity.java | 22 ++-- .../enderface/EnderfaceTravelTarget.java | 61 +++++----- .../EnderPOIApiImpl.java} | 17 +-- .../enderio/content/travel/TravelHandler.java | 106 ++++-------------- .../content/travel/TravelStaffItem.java | 9 +- .../content/travel/TravelTargetSavedData.java | 24 ++-- .../travel_anchor/AnchorTravelTarget.java | 68 ++++++++--- .../travel_anchor/TravelAnchorBlock.java | 4 +- .../TravelAnchorBlockEntity.java | 8 +- .../network/ClientPayloadHandler.java | 10 +- .../foundation/network/EIONetwork.java | 4 +- .../network/ServerPayloadHandler.java | 10 +- ... => ClientboundEnderPOIUpdatedPacket.java} | 10 +- .../enderio/init/EIOTravelTargets.java | 22 ++-- .../com.enderio.enderio.api.poi.EnderPOIApi | 2 + ...enderio.enderio.api.travel.TravelTargetApi | 1 - 39 files changed, 335 insertions(+), 392 deletions(-) create mode 100644 enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOI.java create mode 100644 enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIApi.java rename enderio/src/main/java/com/enderio/enderio/api/{travel/TravelTargetSerializer.java => poi/EnderPOISerializer.java} (68%) create mode 100644 enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIType.java create mode 100644 enderio/src/main/java/com/enderio/enderio/api/poi/POIRenderer.java create mode 100644 enderio/src/main/java/com/enderio/enderio/api/poi/RegisterEnderPOIRenderersEvent.java rename enderio/src/main/java/com/enderio/enderio/api/{travel => poi}/package-info.java (70%) delete mode 100644 enderio/src/main/java/com/enderio/enderio/api/travel/RegisterTravelRenderersEvent.java delete mode 100644 enderio/src/main/java/com/enderio/enderio/api/travel/TravelRenderer.java delete mode 100644 enderio/src/main/java/com/enderio/enderio/api/travel/TravelTarget.java delete mode 100644 enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetApi.java delete mode 100644 enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetType.java create mode 100644 enderio/src/main/java/com/enderio/enderio/client/content/enderface/package-info.java rename enderio/src/main/java/com/enderio/enderio/content/{travel/TravelTargetApiImpl.java => poi/EnderPOIApiImpl.java} (59%) rename enderio/src/main/java/com/enderio/enderio/foundation/network/packets/{ClientboundTravelTargetUpdatedPacket.java => ClientboundEnderPOIUpdatedPacket.java} (50%) create mode 100644 enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.poi.EnderPOIApi delete mode 100644 enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.travel.TravelTargetApi diff --git a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java index 8c1cbda330..04b0333b15 100644 --- a/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java +++ b/enderio-armory/src/main/java/com/enderio/armory/common/item/darksteel/upgrades/travel/TravelUpgrade.java @@ -4,7 +4,7 @@ import com.enderio.armory.common.capability.DarkSteelHelper; import com.enderio.armory.common.item.darksteel.upgrades.DarkSteelUpgradeRegistry; import com.enderio.armory.common.lang.ArmoryLang; -import com.enderio.enderio.api.travel.TravelTarget; +import com.enderio.enderio.api.poi.EnderPOI; import com.enderio.enderio.config.base.BaseConfig; import com.enderio.enderio.content.travel.TravelHandler; import com.enderio.enderio.init.EIODataComponents; @@ -102,14 +102,14 @@ private static boolean tryPerformAction(Item item, Level level, Player player, I } private static boolean performAction(Item item, Level level, Player player) { - Optional target = TravelHandler.getTeleportAnchorTarget(player); + Optional target = TravelHandler.getEnderPOIs(player); if (target.isEmpty()) { if (TravelHandler.shortTeleport(level, player)) { player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); return true; } } else { - if (TravelHandler.blockTeleport(level, player)) { + if (target.get().onActivation(level, player)) { player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); return true; } diff --git a/enderio/src/main/java/com/enderio/enderio/api/EnderIORegistries.java b/enderio/src/main/java/com/enderio/enderio/api/EnderIORegistries.java index 914c355d32..b58022ffa1 100644 --- a/enderio/src/main/java/com/enderio/enderio/api/EnderIORegistries.java +++ b/enderio/src/main/java/com/enderio/enderio/api/EnderIORegistries.java @@ -6,8 +6,8 @@ import com.enderio.enderio.api.conduits.network.ConduitNetworkContextType; import com.enderio.enderio.api.conduits.network.node.NodeDataType; import com.enderio.enderio.api.conduits.network.node.legacy.ConduitDataType; -import com.enderio.enderio.api.travel.TravelTargetSerializer; -import com.enderio.enderio.api.travel.TravelTargetType; +import com.enderio.enderio.api.poi.EnderPOISerializer; +import com.enderio.enderio.api.poi.EnderPOIType; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -15,11 +15,11 @@ public class EnderIORegistries { - public static final Registry> TRAVEL_TARGET_TYPES = new RegistryBuilder<>(Keys.TRAVEL_TARGET_TYPES) + public static final Registry> TRAVEL_TARGET_TYPES = new RegistryBuilder<>(Keys.TRAVEL_TARGET_TYPES) .sync(true) .create(); - public static final Registry> TRAVEL_TARGET_SERIALIZERS = new RegistryBuilder<>(Keys.TRAVEL_TARGET_SERIALIZERS) + public static final Registry> TRAVEL_TARGET_SERIALIZERS = new RegistryBuilder<>(Keys.TRAVEL_TARGET_SERIALIZERS) .sync(true) .create(); @@ -41,8 +41,8 @@ public class EnderIORegistries { Keys.CONDUIT_NETWORK_CONTEXT_TYPE).sync(true).create(); public static class Keys { - public static final ResourceKey>> TRAVEL_TARGET_TYPES = createKey("travel_target_types"); - public static final ResourceKey>> TRAVEL_TARGET_SERIALIZERS = createKey("travel_target_serializers"); + public static final ResourceKey>> TRAVEL_TARGET_TYPES = createKey("travel_target_types"); + public static final ResourceKey>> TRAVEL_TARGET_SERIALIZERS = createKey("travel_target_serializers"); @Deprecated(since = "8.0.0") public static final ResourceKey>> CONDUIT_DATA_TYPE = createKey( diff --git a/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOI.java b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOI.java new file mode 100644 index 0000000000..8cd88cc44c --- /dev/null +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOI.java @@ -0,0 +1,32 @@ +package com.enderio.enderio.api.poi; + +import com.enderio.enderio.api.EnderIORegistries; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; + +public interface EnderPOI { + Codec CODEC = EnderIORegistries.TRAVEL_TARGET_SERIALIZERS.byNameCodec() + .dispatch(EnderPOI::serializer, EnderPOISerializer::codec); + StreamCodec STREAM_CODEC = ByteBufCodecs + .registry(EnderIORegistries.Keys.TRAVEL_TARGET_SERIALIZERS) + .dispatch(EnderPOI::serializer, EnderPOISerializer::streamCodec); + + BlockPos pos(); + + int item2BlockRange(); + + int block2BlockRange(); + + boolean isActive(); + + boolean onActivation(Level level, Player player); + + EnderPOIType type(); + + EnderPOISerializer serializer(); +} diff --git a/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIApi.java b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIApi.java new file mode 100644 index 0000000000..8a3bed9aa0 --- /dev/null +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIApi.java @@ -0,0 +1,19 @@ +package com.enderio.enderio.api.poi; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; + +import java.util.Collection; +import java.util.Optional; +import java.util.ServiceLoader; +import java.util.stream.Stream; + +public interface EnderPOIApi { + EnderPOIApi INSTANCE = ServiceLoader.load(EnderPOIApi.class).findFirst().orElseThrow(); + + Optional get(Level level, BlockPos pos); + void set(Level level, T travelTarget); + void removeAt(Level level, BlockPos pos); + Collection getAll(Level level); + Stream getInItemRange(Level level, BlockPos center); +} diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetSerializer.java b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOISerializer.java similarity index 68% rename from enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetSerializer.java rename to enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOISerializer.java index b1b455d695..ec4805b763 100644 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetSerializer.java +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOISerializer.java @@ -1,10 +1,10 @@ -package com.enderio.enderio.api.travel; +package com.enderio.enderio.api.poi; import com.mojang.serialization.MapCodec; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -public interface TravelTargetSerializer { +public interface EnderPOISerializer { MapCodec codec(); StreamCodec streamCodec(); } diff --git a/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIType.java b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIType.java new file mode 100644 index 0000000000..5d4e0d5ad5 --- /dev/null +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/EnderPOIType.java @@ -0,0 +1,15 @@ +package com.enderio.enderio.api.poi; + +import net.minecraft.resources.ResourceLocation; + +public interface EnderPOIType { + static EnderPOIType simple(final ResourceLocation name) { + final String toString = name.toString(); + return new EnderPOIType<>() { + @Override + public String toString() { + return toString; + } + }; + } +} diff --git a/enderio/src/main/java/com/enderio/enderio/api/poi/POIRenderer.java b/enderio/src/main/java/com/enderio/enderio/api/poi/POIRenderer.java new file mode 100644 index 0000000000..e2e3ed1851 --- /dev/null +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/POIRenderer.java @@ -0,0 +1,8 @@ +package com.enderio.enderio.api.poi; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.LevelRenderer; + +public interface POIRenderer { + void render(T pOIData, LevelRenderer levelRenderer, PoseStack poseStack, double distanceSquared, boolean active, float partialTick); +} diff --git a/enderio/src/main/java/com/enderio/enderio/api/poi/RegisterEnderPOIRenderersEvent.java b/enderio/src/main/java/com/enderio/enderio/api/poi/RegisterEnderPOIRenderersEvent.java new file mode 100644 index 0000000000..184f2ad935 --- /dev/null +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/RegisterEnderPOIRenderersEvent.java @@ -0,0 +1,24 @@ +package com.enderio.enderio.api.poi; + +import net.neoforged.bus.api.Event; +import net.neoforged.fml.event.IModBusEvent; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class RegisterEnderPOIRenderersEvent extends Event implements IModBusEvent { + + public interface TravelRendererFactory { + POIRenderer createRenderer(); + } + + private final Map, TravelRendererFactory> renderers = new ConcurrentHashMap<>(); + + public void register(EnderPOIType type, TravelRendererFactory rendererFactory) { + renderers.put(type, rendererFactory); + } + + public Map, TravelRendererFactory> getRenderers() { + return Map.copyOf(renderers); + } +} diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/package-info.java b/enderio/src/main/java/com/enderio/enderio/api/poi/package-info.java similarity index 70% rename from enderio/src/main/java/com/enderio/enderio/api/travel/package-info.java rename to enderio/src/main/java/com/enderio/enderio/api/poi/package-info.java index 52f3f31d2c..d2c1c198cb 100644 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/package-info.java +++ b/enderio/src/main/java/com/enderio/enderio/api/poi/package-info.java @@ -1,4 +1,4 @@ @javax.annotation.ParametersAreNonnullByDefault @net.minecraft.MethodsReturnNonnullByDefault -package com.enderio.enderio.api.travel; +package com.enderio.enderio.api.poi; diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/RegisterTravelRenderersEvent.java b/enderio/src/main/java/com/enderio/enderio/api/travel/RegisterTravelRenderersEvent.java deleted file mode 100644 index 69ffd3cd7f..0000000000 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/RegisterTravelRenderersEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.enderio.enderio.api.travel; - -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class RegisterTravelRenderersEvent extends Event implements IModBusEvent { - - public interface TravelRendererFactory { - TravelRenderer createRenderer(); - } - - private final Map, TravelRendererFactory> renderers = new ConcurrentHashMap<>(); - - public void register(TravelTargetType type, TravelRendererFactory rendererFactory) { - renderers.put(type, rendererFactory); - } - - public Map, TravelRendererFactory> getRenderers() { - return Map.copyOf(renderers); - } -} diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelRenderer.java b/enderio/src/main/java/com/enderio/enderio/api/travel/TravelRenderer.java deleted file mode 100644 index b8b673a104..0000000000 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelRenderer.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.enderio.enderio.api.travel; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.LevelRenderer; - -public interface TravelRenderer { - void render(T travelData, LevelRenderer levelRenderer, PoseStack poseStack, double distanceSquared, boolean active, float partialTick); -} diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTarget.java b/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTarget.java deleted file mode 100644 index 54dfe82d06..0000000000 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTarget.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.enderio.enderio.api.travel; - -import com.enderio.enderio.api.EnderIORegistries; -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import org.jetbrains.annotations.ApiStatus; - -public interface TravelTarget { - Codec CODEC = EnderIORegistries.TRAVEL_TARGET_SERIALIZERS.byNameCodec() - .dispatch(TravelTarget::serializer, TravelTargetSerializer::codec); - StreamCodec STREAM_CODEC = ByteBufCodecs - .registry(EnderIORegistries.Keys.TRAVEL_TARGET_SERIALIZERS) - .dispatch(TravelTarget::serializer, TravelTargetSerializer::streamCodec); - - BlockPos pos(); - - int item2BlockRange(); - - int block2BlockRange(); - - /** - * @deprecated No longer used directly, use canTeleportTo and canJumpTo instead. These are more specific to the possible travel types. - * @return Whether the target can be travelled to. - */ - @Deprecated(since = "7.0.12-alpha") - default boolean canTravelTo() { - return true; - } - - /** - * @return Whether the target can be teleported to. - */ - default boolean canTeleportTo() { - return canTravelTo(); - } - - /** - * @return Whether the target can be jumped to like an elevator. - */ - default boolean canJumpTo() { - return canTravelTo(); - } - - /** - * @apiNote This method is internal, as it is used for an unreleased feature. It is not intended for use by other mods yet, as it will change. - * @return Whether the target has a special remote interaction. - */ - @ApiStatus.Internal - default boolean canInteract() { - return false; - } - - /** - * Interact with the target remotely. - * @apiNote This method is internal, as it is used for an unreleased feature. It is not intended for use by other mods yet, as it will change. - * @return true if action was successful - */ - @ApiStatus.Internal - default boolean interact(Level level, Player player) { - return false; - } - - TravelTargetType type(); - - TravelTargetSerializer serializer(); -} diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetApi.java b/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetApi.java deleted file mode 100644 index 895b7ecac8..0000000000 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.enderio.enderio.api.travel; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; - -import java.util.Collection; -import java.util.Optional; -import java.util.ServiceLoader; -import java.util.stream.Stream; - -public interface TravelTargetApi { - TravelTargetApi INSTANCE = ServiceLoader.load(TravelTargetApi.class).findFirst().orElseThrow(); - - Optional get(Level level, BlockPos pos); - void set(Level level, T travelTarget); - void removeAt(Level level, BlockPos pos); - Collection getAll(Level level); - Stream getInItemRange(Level level, BlockPos center); -} diff --git a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetType.java b/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetType.java deleted file mode 100644 index 1f83fb23bb..0000000000 --- a/enderio/src/main/java/com/enderio/enderio/api/travel/TravelTargetType.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.enderio.enderio.api.travel; - -import net.minecraft.resources.ResourceLocation; - -public interface TravelTargetType { - static TravelTargetType simple(final ResourceLocation name) { - final String toString = name.toString(); - return new TravelTargetType<>() { - @Override - public String toString() { - return toString; - } - }; - } -} diff --git a/enderio/src/main/java/com/enderio/enderio/client/EnderIOClient.java b/enderio/src/main/java/com/enderio/enderio/client/EnderIOClient.java index 7635f64148..e389e630e8 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/EnderIOClient.java +++ b/enderio/src/main/java/com/enderio/enderio/client/EnderIOClient.java @@ -4,8 +4,8 @@ import com.enderio.enderio.EnderIO; import com.enderio.enderio.api.conduits.model.RegisterConduitModelModifiersEvent; import com.enderio.enderio.api.conduits.screen.RegisterConduitScreenTypesEvent; +import com.enderio.enderio.api.poi.RegisterEnderPOIRenderersEvent; import com.enderio.enderio.api.soul.SoulBoundUtils; -import com.enderio.enderio.api.travel.RegisterTravelRenderersEvent; import com.enderio.enderio.client.content.conduits.ConduitBundleExtension; import com.enderio.enderio.client.content.conduits.ConduitFacadeColor; import com.enderio.enderio.client.content.conduits.gui.ConduitScreen; @@ -389,7 +389,7 @@ public BlockEntityWithoutLevelRenderer getCustomRenderer() { } @SubscribeEvent - public static void registerTravelRenderers(RegisterTravelRenderersEvent event) { + public static void registerTravelRenderers(RegisterEnderPOIRenderersEvent event) { event.register(EIOTravelTargets.TRAVEL_ANCHOR_TYPE.get(), TravelAnchorRenderer::new); event.register(EIOTravelTargets.ENDERFACE_TYPE.get(), EnderfaceRenderer::new); } diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/enderface/EnderfaceRenderer.java b/enderio/src/main/java/com/enderio/enderio/client/content/enderface/EnderfaceRenderer.java index 2a7adcdc03..15dc1e5e96 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/content/enderface/EnderfaceRenderer.java +++ b/enderio/src/main/java/com/enderio/enderio/client/content/enderface/EnderfaceRenderer.java @@ -1,6 +1,6 @@ package com.enderio.enderio.client.content.enderface; -import com.enderio.enderio.api.travel.TravelRenderer; +import com.enderio.enderio.api.poi.POIRenderer; import com.enderio.enderio.client.foundation.renderer.OutlineBuffer; import com.enderio.enderio.client.foundation.renderer.OutlineRenderType; import com.enderio.enderio.content.enderface.EnderfaceTravelTarget; @@ -15,7 +15,7 @@ import net.minecraft.util.FastColor; import net.minecraft.world.level.block.state.BlockState; -public class EnderfaceRenderer implements TravelRenderer { +public class EnderfaceRenderer implements POIRenderer { public static final RenderType BOLD_LINES = OutlineRenderType.createLines("bold_lines", 3); public static final RenderType VERY_BOLD_LINES = OutlineRenderType.createLines("very_bold_lines", 5); @@ -26,9 +26,9 @@ public void render(EnderfaceTravelTarget travelData, LevelRenderer levelRenderer poseStack.translate(travelData.pos().getX(), travelData.pos().getY(), travelData.pos().getZ()); Minecraft minecraft = Minecraft.getInstance(); OutlineBuffer buffer = OutlineBuffer.INSTANCE; - int color = 0xFFFFFF; + int color = ChatFormatting.GREEN.getColor()== null ? 0xFFFFFF : ChatFormatting.GREEN.getColor(); if (active) { - color = ChatFormatting.GOLD.getColor() == null ? 0xFFFFFF : ChatFormatting.GOLD.getColor(); + color = ChatFormatting.DARK_GREEN.getColor() == null ? 0xFFFFFF : ChatFormatting.DARK_GREEN.getColor(); } // Render Model diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/enderface/package-info.java b/enderio/src/main/java/com/enderio/enderio/client/content/enderface/package-info.java new file mode 100644 index 0000000000..55a70e0bdd --- /dev/null +++ b/enderio/src/main/java/com/enderio/enderio/client/content/enderface/package-info.java @@ -0,0 +1,4 @@ +@javax.annotation.ParametersAreNonnullByDefault +@net.minecraft.MethodsReturnNonnullByDefault + +package com.enderio.enderio.client.content.enderface; diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/machines/gui/screen/EnderfaceScreen.java b/enderio/src/main/java/com/enderio/enderio/client/content/machines/gui/screen/EnderfaceScreen.java index d0afe10e5f..b5e6a06c4d 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/content/machines/gui/screen/EnderfaceScreen.java +++ b/enderio/src/main/java/com/enderio/enderio/client/content/machines/gui/screen/EnderfaceScreen.java @@ -64,7 +64,7 @@ public class EnderfaceScreen extends Screen { private final BlockPos enderfacePos; private final ClientLevel world; - private float pitch = -45; + private float pitch = 45; private float yaw = 45; private boolean chunkLoaded; @@ -167,9 +167,9 @@ public boolean mouseDragged(double mouseX, double mouseY, int button, double pDr || InputConstants.isKeyDown(window, InputConstants.KEY_LSHIFT)) { distance -= dy * 15; } else { - yaw -= dx * 180; + yaw += dx * 180; pitch += dy * 180; - pitch = (float) Mth.clamp(pitch, -80, 80); + pitch = Mth.clamp(pitch, -80, 80); } return true; diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorHud.java b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorHud.java index 8415046f70..34fb1a4ce6 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorHud.java +++ b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorHud.java @@ -1,6 +1,6 @@ package com.enderio.enderio.client.content.travel; -import com.enderio.enderio.api.travel.TravelTarget; +import com.enderio.enderio.api.poi.EnderPOI; import com.enderio.enderio.content.travel.TravelHandler; import com.enderio.enderio.content.travel.travel_anchor.AnchorTravelTarget; import com.enderio.enderio.init.MachineBlocks; @@ -41,7 +41,7 @@ public void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) { .ifPresent(target -> showElevatorTarget(guiGraphics, minecraft.font, target, Direction.DOWN)); } - private static void showElevatorTarget(GuiGraphics guiGraphics, Font font, TravelTarget target, + private static void showElevatorTarget(GuiGraphics guiGraphics, Font font, EnderPOI target, Direction direction) { String txt = switch (direction) { case UP -> "↑"; diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorRenderer.java b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorRenderer.java index 7bc3225f7f..34c90a68d0 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorRenderer.java +++ b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelAnchorRenderer.java @@ -1,6 +1,6 @@ package com.enderio.enderio.client.content.travel; -import com.enderio.enderio.api.travel.TravelRenderer; +import com.enderio.enderio.api.poi.POIRenderer; import com.enderio.enderio.client.foundation.renderer.OutlineBuffer; import com.enderio.enderio.client.foundation.renderer.OutlineRenderType; import com.enderio.enderio.content.travel.travel_anchor.AnchorTravelTarget; @@ -33,7 +33,7 @@ import java.util.Optional; -public class TravelAnchorRenderer implements TravelRenderer { +public class TravelAnchorRenderer implements POIRenderer { public static final RenderType BOLD_LINES = OutlineRenderType.createLines("bold_lines", 3); public static final RenderType VERY_BOLD_LINES = OutlineRenderType.createLines("very_bold_lines", 5); diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelClientEventHandler.java b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelClientEventHandler.java index b781f2dc6e..5241f383e5 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelClientEventHandler.java +++ b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelClientEventHandler.java @@ -1,5 +1,6 @@ package com.enderio.enderio.client.content.travel; +import com.enderio.enderio.api.poi.EnderPOI; import com.enderio.enderio.content.travel.TravelHandler; import net.minecraft.client.player.Input; import net.minecraft.core.Direction; @@ -12,6 +13,8 @@ import net.neoforged.neoforge.client.event.MovementInputUpdateEvent; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import java.util.Optional; + @EventBusSubscriber(value = Dist.CLIENT) public class TravelClientEventHandler { private static boolean LAST_JUMPING = false; @@ -32,20 +35,16 @@ public static void movementInputUpdate(MovementInputUpdateEvent event) { return; } if (isNewJump) { - boolean success = TravelHandler.blockElevatorTeleport(player.level(), player, Direction.UP, true); - if (!success) { - success = TravelHandler.blockTeleport(player.level(), player, true); - } + Optional enderPOI = TravelHandler.getElevatorAnchorTarget(player, Direction.UP); + boolean success = enderPOI.isPresent() && enderPOI.get().onActivation(player.level(), player); if (success) { JUMP_COOLDOWN = 7; } else { JUMP_COOLDOWN = 0; } } else if (isNewCrouch) { - boolean success = TravelHandler.blockElevatorTeleport(player.level(), player, Direction.DOWN, true); - if (!success) { - TravelHandler.blockTeleport(player.level(), player, true); - } + Optional enderPOI = TravelHandler.getElevatorAnchorTarget(player, Direction.DOWN); + enderPOI.ifPresent(poi -> poi.onActivation(player.level(), player)); } if (JUMP_COOLDOWN > 0) { @@ -62,7 +61,8 @@ public static void emptyClick(PlayerInteractEvent.RightClickEmpty event) { .getEntity() .getItemInHand(InteractionHand.OFF_HAND) .isEmpty() && event.getItemStack().isEmpty()) { - if (TravelHandler.blockTeleport(event.getLevel(), event.getEntity(), true)) { + Optional enderPOI = TravelHandler.getEnderPOIs(player); + if (enderPOI.isPresent() && enderPOI.get().onActivation(event.getLevel(), event.getEntity())) { player.swing(event.getHand(), true); // TODO: 20.6: Is this important? //event.setCancellationResult(InteractionResult.SUCCESS); @@ -76,7 +76,8 @@ public static void blockClick(PlayerInteractEvent.RightClickBlock event) { if (!TravelHandler.canBlockTeleport(player)) { return; } - if (TravelHandler.blockTeleport(event.getLevel(), event.getEntity(), true)) { + Optional enderPOI = TravelHandler.getEnderPOIs(player); + if (enderPOI.isPresent() && enderPOI.get().onActivation(event.getLevel(), event.getEntity())) { event.setCancellationResult(InteractionResult.SUCCESS); event.setCanceled(true); } @@ -88,7 +89,8 @@ public static void itemClick(PlayerInteractEvent.RightClickItem event) { if (!TravelHandler.canBlockTeleport(player)) { return; } - if (TravelHandler.blockTeleport(event.getLevel(), event.getEntity(), true)) { + Optional enderPOI = TravelHandler.getEnderPOIs(player); + if (enderPOI.isPresent() && enderPOI.get().onActivation(event.getLevel(), event.getEntity())) { event.setCancellationResult(InteractionResult.SUCCESS); event.setCanceled(true); } diff --git a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelTargetRendering.java b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelTargetRendering.java index 0b4b5e0056..caec062d70 100644 --- a/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelTargetRendering.java +++ b/enderio/src/main/java/com/enderio/enderio/client/content/travel/TravelTargetRendering.java @@ -1,10 +1,10 @@ package com.enderio.enderio.client.content.travel; -import com.enderio.enderio.api.travel.RegisterTravelRenderersEvent; -import com.enderio.enderio.api.travel.TravelRenderer; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetApi; -import com.enderio.enderio.api.travel.TravelTargetType; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOIApi; +import com.enderio.enderio.api.poi.EnderPOIType; +import com.enderio.enderio.api.poi.POIRenderer; +import com.enderio.enderio.api.poi.RegisterEnderPOIRenderersEvent; import com.enderio.enderio.content.travel.TravelHandler; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Camera; @@ -26,10 +26,10 @@ @EventBusSubscriber(value = Dist.CLIENT) public class TravelTargetRendering { - private static Map, TravelRenderer> RENDERERS; + private static Map, POIRenderer> RENDERERS; public static void init() { - var event = new RegisterTravelRenderersEvent(); + var event = new RegisterEnderPOIRenderersEvent(); ModLoader.postEvent(event); var factories = event.getRenderers(); @@ -37,15 +37,15 @@ public static void init() { factories.forEach((t, f) -> RENDERERS.put(t, f.createRenderer())); } - public static TravelRenderer getRenderer(TravelTargetType type) { + public static POIRenderer getRenderer(EnderPOIType type) { // noinspection unchecked - return (TravelRenderer) RENDERERS.get(type); + return (POIRenderer) RENDERERS.get(type); } - private static void render(T target, LevelRenderer levelRender, PoseStack poseStack, + private static void render(T target, LevelRenderer levelRender, PoseStack poseStack, double distanceSquared, boolean isActive, float partialTick) { // noinspection unchecked - getRenderer((TravelTargetType) target.type()).render(target, levelRender, poseStack, distanceSquared, + getRenderer((EnderPOIType) target.type()).render(target, levelRender, poseStack, distanceSquared, isActive, partialTick); } @@ -64,8 +64,8 @@ public static void renderLevel(RenderLevelStageEvent event) { boolean itemTeleport = TravelHandler.canItemTeleport(player); @Nullable - TravelTarget activeTarget = TravelHandler.getTeleportAnchorTarget(player).orElse(null); - for (TravelTarget target : TravelTargetApi.INSTANCE.getAll(level)) { + EnderPOI activeTarget = TravelHandler.getEnderPOIs(player).orElse(null); + for (EnderPOI target : EnderPOIApi.INSTANCE.getAll(level)) { double range = itemTeleport ? target.item2BlockRange() : target.block2BlockRange(); double distanceSquared = target.pos().distToCenterSqr(player.position()); if (range * range < distanceSquared || distanceSquared < TravelHandler.MIN_TELEPORTATION_DISTANCE_SQUARED diff --git a/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlock.java b/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlock.java index 2697cc3b93..379d7841b4 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlock.java +++ b/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlock.java @@ -1,12 +1,13 @@ package com.enderio.enderio.content.enderface; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.foundation.block.EIOEntityBlock; import com.enderio.enderio.init.EIOBlockEntities; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; public class EnderfaceBlock extends EIOEntityBlock { @@ -16,6 +17,11 @@ public EnderfaceBlock(Properties properties) { super(EIOBlockEntities.ENDERFACE::get, properties); } + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + @Override protected MapCodec codec() { return CODEC; @@ -24,7 +30,7 @@ protected MapCodec codec() { @Override public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { if (level.getBlockEntity(pos) instanceof EnderfaceBlockEntity) { - TravelTargetApi.INSTANCE.removeAt(level, pos); + EnderPOIApi.INSTANCE.removeAt(level, pos); } super.onRemove(state, level, pos, newState, movedByPiston); diff --git a/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlockEntity.java b/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlockEntity.java index c59248c026..df9fa99ba4 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlockEntity.java +++ b/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceBlockEntity.java @@ -1,8 +1,8 @@ package com.enderio.enderio.content.enderface; import com.enderio.core.common.network.NetworkDataSlot; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.config.base.BaseConfig; import com.enderio.enderio.config.machines.MachinesConfig; import com.enderio.enderio.foundation.block.EIOBlockEntity; @@ -21,7 +21,7 @@ import java.util.Optional; public class EnderfaceBlockEntity extends EIOBlockEntity { - private float lastUiPitch = -45; + private float lastUiPitch = 45; private float lastUiYaw = 45; private float lastUiDistance = 10; @@ -34,12 +34,6 @@ public EnderfaceBlockEntity(BlockPos worldPosition, BlockState blockState) { EnderfaceTravelTarget.DATA_SLOT_TYPE.create(this::getOrCreateTravelTarget, this::setTravelTarget)); } - @Override - protected void saveAdditionalSynced(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditionalSynced(tag, registries); - // TODO save ui pitch, etc - } - public float getLastUiPitch() { return lastUiPitch; } @@ -64,8 +58,14 @@ public void setLastUiDistance(float lastUiDistance) { this.lastUiDistance = lastUiDistance; } + @Override + protected void saveAdditionalSynced(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditionalSynced(tag, registries); + // TODO save ui pitch, etc + } + private EnderfaceTravelTarget getOrCreateTravelTarget() { - Optional travelTarget = TravelTargetApi.INSTANCE.get(level, worldPosition); + Optional travelTarget = EnderPOIApi.INSTANCE.get(level, worldPosition); if (travelTarget.isPresent() && travelTarget.get() instanceof EnderfaceTravelTarget anchorTravelTarget) { return anchorTravelTarget; } @@ -76,7 +76,7 @@ private EnderfaceTravelTarget getOrCreateTravelTarget() { } private void setTravelTarget(EnderfaceTravelTarget target) { - TravelTargetApi.INSTANCE.set(level, target); + EnderPOIApi.INSTANCE.set(level, target); } public boolean canBeUsedByPlayer(Player player) { diff --git a/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceTravelTarget.java b/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceTravelTarget.java index 88ba02da06..97363b4a11 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceTravelTarget.java +++ b/enderio/src/main/java/com/enderio/enderio/content/enderface/EnderfaceTravelTarget.java @@ -1,19 +1,23 @@ package com.enderio.enderio.content.enderface; import com.enderio.core.common.network.NetworkDataSlot; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetSerializer; -import com.enderio.enderio.api.travel.TravelTargetType; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOISerializer; +import com.enderio.enderio.api.poi.EnderPOIType; +import com.enderio.enderio.client.content.machines.gui.screen.EnderfaceScreen; import com.enderio.enderio.init.EIOTravelTargets; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import me.liliandev.ensure.ensures.EnsureSide; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; -public record EnderfaceTravelTarget(BlockPos pos) implements TravelTarget { +public record EnderfaceTravelTarget(BlockPos pos) implements EnderPOI { public static NetworkDataSlot.CodecType DATA_SLOT_TYPE = new NetworkDataSlot.CodecType<>( EnderfaceTravelTarget.Serializer.CODEC.codec(), EnderfaceTravelTarget.Serializer.STREAM_CODEC); @@ -28,45 +32,29 @@ public int block2BlockRange() { } @Override - public TravelTargetType type() { - return EIOTravelTargets.ENDERFACE_TYPE.get(); - } - - @Override - public TravelTargetSerializer serializer() { - return EIOTravelTargets.ENDERFACE_SERIALIZER.get(); - } - - @Override - public boolean canTeleportTo() { - return false; - } - - @Override - public boolean canTravelTo() { - return false; + public boolean isActive() { + return true; } @Override - public boolean canJumpTo() { - return false; + public boolean onActivation(Level level, Player player) { + if (level.isClientSide) { + Client.openScreen(level, pos); + } + return true; } @Override - public boolean canInteract() { - return true; + public EnderPOIType type() { + return EIOTravelTargets.ENDERFACE_TYPE.get(); } @Override - public boolean interact(Level level, Player player) { - if (level.isClientSide) { - // TODO: Causes classload errors on dedicated servers. -// Minecraft.getInstance().setScreen(new EnderfaceScreen(pos.immutable(), Minecraft.getInstance().level)); - } - return true; + public EnderPOISerializer serializer() { + return EIOTravelTargets.ENDERFACE_SERIALIZER.get(); } - public static class Serializer implements TravelTargetSerializer { + public static class Serializer implements EnderPOISerializer { public static MapCodec CODEC = RecordCodecBuilder.mapCodec( instance -> instance.group(BlockPos.CODEC.fieldOf("pos").forGetter(EnderfaceTravelTarget::pos)) @@ -85,4 +73,13 @@ public StreamCodec streamCodec() return STREAM_CODEC; } } + + //TODO packet + private static class Client { + + @EnsureSide(EnsureSide.Side.CLIENT) + public static void openScreen(Level level, BlockPos pos) { + Minecraft.getInstance().setScreen(new EnderfaceScreen(pos.immutable(), (ClientLevel) level)); + } + } } diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetApiImpl.java b/enderio/src/main/java/com/enderio/enderio/content/poi/EnderPOIApiImpl.java similarity index 59% rename from enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetApiImpl.java rename to enderio/src/main/java/com/enderio/enderio/content/poi/EnderPOIApiImpl.java index 94836b48f3..35247a997a 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetApiImpl.java +++ b/enderio/src/main/java/com/enderio/enderio/content/poi/EnderPOIApiImpl.java @@ -1,7 +1,8 @@ -package com.enderio.enderio.content.travel; +package com.enderio.enderio.content.poi; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOIApi; +import com.enderio.enderio.content.travel.TravelTargetSavedData; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; @@ -9,15 +10,15 @@ import java.util.Optional; import java.util.stream.Stream; -public class TravelTargetApiImpl implements TravelTargetApi { +public class EnderPOIApiImpl implements EnderPOIApi { @Override - public Optional get(Level level, BlockPos pos) { + public Optional get(Level level, BlockPos pos) { return TravelTargetSavedData.getTravelData(level).getTravelTarget(pos); } @Override - public void set(Level level, T travelTarget) { + public void set(Level level, T travelTarget) { TravelTargetSavedData.getTravelData(level).setTravelTarget(level, travelTarget); } @@ -27,12 +28,12 @@ public void removeAt(Level level, BlockPos pos) { } @Override - public Collection getAll(Level level) { + public Collection getAll(Level level) { return TravelTargetSavedData.getTravelData(level).getTravelTargets(); } @Override - public Stream getInItemRange(Level level, BlockPos center) { + public Stream getInItemRange(Level level, BlockPos center) { return TravelTargetSavedData.getTravelData(level).getTravelTargetsInItemRange(center); } } diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelHandler.java b/enderio/src/main/java/com/enderio/enderio/content/travel/TravelHandler.java index 734a11fa8c..255182d8c9 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelHandler.java +++ b/enderio/src/main/java/com/enderio/enderio/content/travel/TravelHandler.java @@ -1,10 +1,10 @@ package com.enderio.enderio.content.travel; import com.enderio.core.common.energy.ItemStackEnergy; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.config.base.BaseConfig; -import com.enderio.enderio.foundation.network.packets.ServerboundRequestTravelPacket; +import com.enderio.enderio.content.travel.travel_anchor.AnchorTravelTarget; import com.enderio.enderio.foundation.tag.EIOTags; import com.enderio.enderio.init.EIODataComponents; import net.minecraft.core.BlockPos; @@ -26,7 +26,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.entity.EntityTeleportEvent; -import net.neoforged.neoforge.network.PacketDistributor; import org.jetbrains.annotations.Nullable; import java.util.Comparator; @@ -55,8 +54,9 @@ private static boolean canItemTeleport(Player player, InteractionHand hand) { return comp != null && comp; } + //TODO rename tag? It's also interactions public static boolean canBlockTeleport(Player player) { - return !player.level().getBlockState(player.blockPosition().below()).is(EIOTags.Blocks.BLOCKS_TELEPORTATION); + return player.level().getBlockState(player.blockPosition().below()).is(EIOTags.Blocks.BLOCKS_TELEPORTATION); } public static boolean hasResources(ItemStack stack) { @@ -93,59 +93,6 @@ public static boolean shortTeleport(Level level, Player player) { } } - public static boolean blockTeleport(Level level, Player player) { - return blockTeleport(level, player, false); - } - - public static boolean blockTeleport(Level level, Player player, boolean sendToServer) { - return getTeleportAnchorTarget(player) - .filter(iTravelTarget -> blockTeleportTo(level, player, iTravelTarget, sendToServer)) - .isPresent(); - } - - public static boolean interact(Level level, Player player) { - return getInteractionTarget(player).filter(iTravelTarget -> interactWithTarget(level, player, iTravelTarget)) - .isPresent(); - } - - public static boolean blockElevatorTeleport(Level level, Player player, Direction direction, boolean sendToServer) { - if (direction.getStepY() != 0) { - return getElevatorAnchorTarget(player, direction) - .filter(iTravelTarget -> blockTeleportTo(level, player, iTravelTarget, sendToServer)) - .isPresent(); - } - return false; - } - - public static boolean blockTeleportTo(Level level, Player player, TravelTarget target, boolean sendToServer) { - Optional height = isTeleportPositionClear(level, target.pos()); - if (height.isEmpty()) { - return false; - } - BlockPos blockPos = target.pos(); - Vec3 teleportPosition = new Vec3(blockPos.getX() + 0.5f, blockPos.getY() + height.get() + 1, - blockPos.getZ() + 0.5f); - teleportPosition = teleportEvent(player, teleportPosition).orElse(null); - if (teleportPosition != null) { - if (player instanceof ServerPlayer serverPlayer) { - player.teleportTo(teleportPosition.x(), teleportPosition.y(), teleportPosition.z()); - // Stop "moved too quickly" warnings - serverPlayer.connection.resetPosition(); - player.playNotifySound(SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 0.75F, 1F); - } else if (sendToServer) { - PacketDistributor.sendToServer(new ServerboundRequestTravelPacket(target.pos())); - } - - player.resetFallDistance(); - return true; - } - return false; - } - - private static boolean interactWithTarget(Level level, Player player, TravelTarget target) { - return target.interact(level, player); - } - public static Optional teleportPosition(Level level, Player player) { @Nullable BlockPos target = null; @@ -238,32 +185,25 @@ private static BlockPos traversalCheck(Level level, BlockPos traversePos) { return null; } - public static Optional getInteractionTarget(Player player) { + public static Optional getEnderPOIs(Player player) { Vec3 positionVec = player.position().add(0, player.getEyeHeight(), 0); - return TravelTargetApi.INSTANCE.getInItemRange(player.level(), player.blockPosition()) - .filter(TravelTarget::canInteract) - .filter(target -> target.pos().distToCenterSqr(player.position()) > MIN_TELEPORTATION_DISTANCE_SQUARED) - .filter(target -> Math.abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), - player.getXRot())) <= Math.toRadians(15)) - .min(Comparator.comparingDouble(target -> Math - .abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), player.getXRot())))); - } - - public static Optional getTeleportAnchorTarget(Player player) { - Vec3 positionVec = player.position().add(0, player.getEyeHeight(), 0); - - return TravelTargetApi.INSTANCE.getInItemRange(player.level(), player.blockPosition()) - .filter(TravelTarget::canTeleportTo) - .filter(target -> target.pos().distToCenterSqr(player.position()) > MIN_TELEPORTATION_DISTANCE_SQUARED) - .filter(target -> Math.abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), - player.getXRot())) <= Math.toRadians(15)) - .filter(target -> isTeleportPositionClear(player.level(), target.pos()).isPresent()) - .min(Comparator.comparingDouble(target -> Math - .abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), player.getXRot())))); + return EnderPOIApi.INSTANCE.getInItemRange(player.level(), player.blockPosition()) + .filter(EnderPOI::isActive) + .filter(target -> target.pos().distToCenterSqr(player.position()) > MIN_TELEPORTATION_DISTANCE_SQUARED) + .filter(target -> Math.abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), + player.getXRot())) <= Math.toRadians(15)) + .filter(target -> { + if (target instanceof AnchorTravelTarget) { + return isTeleportPositionClear(player.level(), target.pos()).isPresent(); + } + return true; + }) + .min(Comparator.comparingDouble(target -> Math + .abs(getAngleRadians(positionVec, target.pos(), player.getYRot(), player.getXRot())))); } - public static Optional getElevatorAnchorTarget(Player player, Direction direction) { + public static Optional getElevatorAnchorTarget(Player player, Direction direction) { int anchorRange = BaseConfig.COMMON.ITEMS.TRAVELLING_BLOCK_TO_BLOCK_RANGE.get(); BlockPos anchorPos = player.blockPosition().below(); @@ -281,11 +221,11 @@ public static Optional getElevatorAnchorTarget(Player player, Dire lowerY = anchorY - anchorRange - 1; } - return TravelTargetApi.INSTANCE.getAll(player.level()) + return EnderPOIApi.INSTANCE.getAll(player.level()) .stream() .filter(target -> target.pos().getX() == anchorX && target.pos().getZ() == anchorZ) .filter(target -> target.pos().getY() > lowerY && target.pos().getY() < upperY) - .filter(TravelTarget::canJumpTo) + .filter(t -> t instanceof AnchorTravelTarget anchor && anchor.canJumpTo()) .filter(target -> isTeleportPositionClear(player.level(), target.pos()).isPresent()) .min(Comparator.comparingDouble(target -> Math.abs(target.pos().getY() - anchorY))); } @@ -321,7 +261,7 @@ public static Optional isTeleportPositionClear(BlockGetter level, BlockP return Optional.empty(); } - private static Optional teleportEvent(Player player, Vec3 target) { + public static Optional teleportEvent(Player player, Vec3 target) { EntityTeleportEvent event = new EntityTeleportEvent(player, target.x(), target.y(), target.z()); if (NeoForge.EVENT_BUS.post(event).isCanceled()) { return Optional.empty(); diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelStaffItem.java b/enderio/src/main/java/com/enderio/enderio/content/travel/TravelStaffItem.java index 67c90d3a1a..0b9f884a08 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelStaffItem.java +++ b/enderio/src/main/java/com/enderio/enderio/content/travel/TravelStaffItem.java @@ -5,6 +5,7 @@ import com.enderio.core.common.energy.ItemStackEnergy; import com.enderio.core.common.item.ICustomCreativeTabEntries; import com.enderio.core.common.util.TooltipUtil; +import com.enderio.enderio.api.poi.EnderPOI; import com.enderio.enderio.config.base.BaseConfig; import com.enderio.enderio.foundation.lang.EIOCommonLang; import com.enderio.enderio.init.EIODataComponents; @@ -24,6 +25,7 @@ import net.neoforged.neoforge.energy.IEnergyStorage; import java.util.List; +import java.util.Optional; public class TravelStaffItem extends Item implements AdvancedTooltipProvider, ICustomCreativeTabEntries { @@ -88,12 +90,9 @@ public boolean performAction(Item item, Level level, Player player) { return true; } } else { - if (TravelHandler.blockTeleport(level, player)) { + Optional enderPOIs = TravelHandler.getEnderPOIs(player); + if (enderPOIs.isPresent() && enderPOIs.get().onActivation(level, player)) { player.getCooldowns().addCooldown(item, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); - return true; - } else if (TravelHandler.interact(level, player)) { - player.getCooldowns().addCooldown(this, BaseConfig.COMMON.ITEMS.TRAVELLING_BLINK_DISABLED_TIME.get()); - return true; } } return false; diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetSavedData.java b/enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetSavedData.java index ccf8488d90..651300e1ae 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetSavedData.java +++ b/enderio/src/main/java/com/enderio/enderio/content/travel/TravelTargetSavedData.java @@ -1,9 +1,9 @@ package com.enderio.enderio.content.travel; -import com.enderio.enderio.api.travel.TravelTarget; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.foundation.network.packets.ClientboundEnderPOIUpdatedPacket; import com.enderio.enderio.foundation.network.packets.ClientboundSyncTravelDataPacket; import com.enderio.enderio.foundation.network.packets.ClientboundTravelTargetRemovedPacket; -import com.enderio.enderio.foundation.network.packets.ClientboundTravelTargetUpdatedPacket; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; @@ -36,7 +36,7 @@ public class TravelTargetSavedData extends SavedData { private static final Map, TravelTargetSavedData> CLIENT_DATA = new ConcurrentHashMap<>(); public static final String TARGETS = "targets"; - private final Map travelTargets = new HashMap<>(); + private final Map travelTargets = new HashMap<>(); public TravelTargetSavedData() { } @@ -55,15 +55,15 @@ public static TravelTargetSavedData getTravelData(Level level) { } } - public Optional getTravelTarget(BlockPos pos) { + public Optional getTravelTarget(BlockPos pos) { return Optional.ofNullable(travelTargets.get(pos)); } - public Collection getTravelTargets() { + public Collection getTravelTargets() { return travelTargets.values(); } - public Stream getTravelTargetsInItemRange(BlockPos center) { + public Stream getTravelTargetsInItemRange(BlockPos center) { return travelTargets.entrySet() .stream() .filter(entry -> entry.getValue().item2BlockRange() == Integer.MAX_VALUE @@ -73,9 +73,9 @@ public Stream getTravelTargetsInItemRange(BlockPos center) { } // Adds or updates. - public void setTravelTarget(Level level, TravelTarget target) { + public void setTravelTarget(Level level, EnderPOI target) { if (level instanceof ServerLevel serverLevel) { - PacketDistributor.sendToPlayersInDimension(serverLevel, new ClientboundTravelTargetUpdatedPacket(target)); + PacketDistributor.sendToPlayersInDimension(serverLevel, new ClientboundEnderPOIUpdatedPacket(target)); } travelTargets.put(target.pos(), target); @@ -97,8 +97,8 @@ public CompoundTag save(CompoundTag nbt, HolderLookup.Provider lookupProvider) { return nbt; } - private Tag saveTarget(HolderLookup.Provider lookupProvider, T target) { - return TravelTarget.CODEC.encodeStart(lookupProvider.createSerializationContext(NbtOps.INSTANCE), target) + private Tag saveTarget(HolderLookup.Provider lookupProvider, T target) { + return EnderPOI.CODEC.encodeStart(lookupProvider.createSerializationContext(NbtOps.INSTANCE), target) .getOrThrow(); } @@ -111,8 +111,8 @@ public void loadNBT(HolderLookup.Provider lookupProvider, CompoundTag nbt) { .forEach(target -> travelTargets.put(target.pos(), target)); } - private TravelTarget loadTarget(HolderLookup.Provider lookupProvider, Tag tag) { - return TravelTarget.CODEC.decode(lookupProvider.createSerializationContext(NbtOps.INSTANCE), tag) + private EnderPOI loadTarget(HolderLookup.Provider lookupProvider, Tag tag) { + return EnderPOI.CODEC.decode(lookupProvider.createSerializationContext(NbtOps.INSTANCE), tag) .getOrThrow() .getFirst(); } diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/AnchorTravelTarget.java b/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/AnchorTravelTarget.java index ead9bffb7c..73b8959719 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/AnchorTravelTarget.java +++ b/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/AnchorTravelTarget.java @@ -1,10 +1,12 @@ package com.enderio.enderio.content.travel.travel_anchor; import com.enderio.core.common.network.NetworkDataSlot; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetSerializer; -import com.enderio.enderio.api.travel.TravelTargetType; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOISerializer; +import com.enderio.enderio.api.poi.EnderPOIType; import com.enderio.enderio.config.base.BaseConfig; +import com.enderio.enderio.content.travel.TravelHandler; +import com.enderio.enderio.foundation.network.packets.ServerboundRequestTravelPacket; import com.enderio.enderio.init.EIOTravelTargets; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; @@ -15,9 +17,18 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.network.PacketDistributor; -public record AnchorTravelTarget(BlockPos pos, String name, Item icon, boolean isVisible) implements TravelTarget { +import java.util.Optional; + +public record AnchorTravelTarget(BlockPos pos, String name, Item icon, boolean isVisible) implements EnderPOI { public static final NetworkDataSlot.CodecType DATA_SLOT_TYPE = new NetworkDataSlot.CodecType<>( Serializer.CODEC.codec(), Serializer.STREAM_CODEC); @@ -34,17 +45,7 @@ public AnchorTravelTarget withVisible(boolean isVisible) { return new AnchorTravelTarget(pos, name, icon, isVisible); } - @Override - public boolean canTravelTo() { - return isVisible; - } - - @Override - public boolean canTeleportTo() { - return isVisible(); - } - - @Override + //@Override public boolean canJumpTo() { // TODO: Protected & Private Anchors return true; @@ -61,16 +62,47 @@ public int block2BlockRange() { } @Override - public TravelTargetType type() { + public boolean isActive() { + return isVisible; + } + + @Override + public boolean onActivation(Level level, Player player) { + Optional height = TravelHandler.isTeleportPositionClear(level, this.pos()); + if (height.isEmpty()) { + return false; + } + BlockPos blockPos = this.pos(); + Vec3 teleportPosition = new Vec3(blockPos.getX() + 0.5f, blockPos.getY() + height.get() + 1, + blockPos.getZ() + 0.5f); + teleportPosition = TravelHandler.teleportEvent(player, teleportPosition).orElse(null); + if (teleportPosition != null) { + if (player instanceof ServerPlayer serverPlayer) { + player.teleportTo(teleportPosition.x(), teleportPosition.y(), teleportPosition.z()); + // Stop "moved too quickly" warnings + serverPlayer.connection.resetPosition(); + player.playNotifySound(SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 0.75F, 1F); + } else { + PacketDistributor.sendToServer(new ServerboundRequestTravelPacket(this.pos())); + } + + player.resetFallDistance(); + return true; + } + return false; + } + + @Override + public EnderPOIType type() { return EIOTravelTargets.TRAVEL_ANCHOR_TYPE.get(); } @Override - public TravelTargetSerializer serializer() { + public EnderPOISerializer serializer() { return EIOTravelTargets.TRAVEL_ANCHOR_SERIALIZER.get(); } - public static class Serializer implements TravelTargetSerializer { + public static class Serializer implements EnderPOISerializer { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance .group(BlockPos.CODEC.fieldOf("pos").forGetter(AnchorTravelTarget::pos), diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlock.java b/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlock.java index 21c86d688c..16301a0009 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlock.java +++ b/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlock.java @@ -1,6 +1,6 @@ package com.enderio.enderio.content.travel.travel_anchor; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.foundation.block.MachineBlock; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; @@ -17,7 +17,7 @@ public TravelAnchorBlock(Supplier> blockEntityType, @Override public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { if (level.getBlockEntity(pos) instanceof TravelAnchorBlockEntity anchorBlock) { - TravelTargetApi.INSTANCE.removeAt(level, pos); + EnderPOIApi.INSTANCE.removeAt(level, pos); } super.onRemove(state, level, pos, newState, movedByPiston); diff --git a/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlockEntity.java b/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlockEntity.java index f1607d1cf3..9d8f5c79db 100644 --- a/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlockEntity.java +++ b/enderio/src/main/java/com/enderio/enderio/content/travel/travel_anchor/TravelAnchorBlockEntity.java @@ -1,8 +1,8 @@ package com.enderio.enderio.content.travel.travel_anchor; import com.enderio.core.common.network.NetworkDataSlot; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.foundation.block.entity.MachineBlockEntity; import com.enderio.enderio.foundation.inventory.MachineInventoryLayout; import com.enderio.enderio.foundation.inventory.SingleSlotAccess; @@ -102,7 +102,7 @@ public void setIsVisible(boolean isVisible) { } private AnchorTravelTarget getOrCreateTravelTarget() { - Optional travelTarget = TravelTargetApi.INSTANCE.get(level, worldPosition); + Optional travelTarget = EnderPOIApi.INSTANCE.get(level, worldPosition); if (travelTarget.isPresent() && travelTarget.get() instanceof AnchorTravelTarget anchorTravelTarget) { return anchorTravelTarget; } @@ -113,7 +113,7 @@ private AnchorTravelTarget getOrCreateTravelTarget() { } private void setTravelTarget(AnchorTravelTarget target) { - TravelTargetApi.INSTANCE.set(level, target); + EnderPOIApi.INSTANCE.set(level, target); } } diff --git a/enderio/src/main/java/com/enderio/enderio/foundation/network/ClientPayloadHandler.java b/enderio/src/main/java/com/enderio/enderio/foundation/network/ClientPayloadHandler.java index 56f701cc72..7b1a73fcb6 100644 --- a/enderio/src/main/java/com/enderio/enderio/foundation/network/ClientPayloadHandler.java +++ b/enderio/src/main/java/com/enderio/enderio/foundation/network/ClientPayloadHandler.java @@ -1,10 +1,10 @@ package com.enderio.enderio.foundation.network; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.content.travel.TravelTargetSavedData; import com.enderio.enderio.foundation.network.packets.ClientboundSyncTravelDataPacket; import com.enderio.enderio.foundation.network.packets.ClientboundTravelTargetRemovedPacket; -import com.enderio.enderio.foundation.network.packets.ClientboundTravelTargetUpdatedPacket; +import com.enderio.enderio.foundation.network.packets.ClientboundEnderPOIUpdatedPacket; import net.neoforged.neoforge.network.handling.IPayloadContext; public class ClientPayloadHandler { @@ -21,17 +21,17 @@ public void handleSyncTravelDataPacket(ClientboundSyncTravelDataPacket packet, I }); } - public void handleAddTravelTarget(ClientboundTravelTargetUpdatedPacket packet, IPayloadContext context) { + public void handleAddTravelTarget(ClientboundEnderPOIUpdatedPacket packet, IPayloadContext context) { context.enqueueWork(() -> { var level = context.player().level(); - TravelTargetApi.INSTANCE.set(level, packet.target()); + EnderPOIApi.INSTANCE.set(level, packet.target()); }); } public void handleRemoveTravelTarget(ClientboundTravelTargetRemovedPacket packet, IPayloadContext context) { context.enqueueWork(() -> { var level = context.player().level(); - TravelTargetApi.INSTANCE.removeAt(level, packet.pos()); + EnderPOIApi.INSTANCE.removeAt(level, packet.pos()); }); } } diff --git a/enderio/src/main/java/com/enderio/enderio/foundation/network/EIONetwork.java b/enderio/src/main/java/com/enderio/enderio/foundation/network/EIONetwork.java index 3f5f5728bb..8f27755244 100644 --- a/enderio/src/main/java/com/enderio/enderio/foundation/network/EIONetwork.java +++ b/enderio/src/main/java/com/enderio/enderio/foundation/network/EIONetwork.java @@ -8,7 +8,7 @@ import com.enderio.enderio.foundation.network.packets.ClientboundSoulEngineSoulPacket; import com.enderio.enderio.foundation.network.packets.ClientboundSyncTravelDataPacket; import com.enderio.enderio.foundation.network.packets.ClientboundTravelTargetRemovedPacket; -import com.enderio.enderio.foundation.network.packets.ClientboundTravelTargetUpdatedPacket; +import com.enderio.enderio.foundation.network.packets.ClientboundEnderPOIUpdatedPacket; import com.enderio.enderio.foundation.network.packets.ServerboundBreakConduitPacket; import com.enderio.enderio.foundation.network.packets.ServerboundClearLockedFluidPacket; import com.enderio.enderio.foundation.network.packets.ServerboundCountFilterPacket; @@ -54,7 +54,7 @@ public static void register(final RegisterPayloadHandlersEvent event) { registrar.playToClient(ClientboundSyncTravelDataPacket.TYPE, ClientboundSyncTravelDataPacket.STREAM_CODEC, ClientPayloadHandler.getInstance()::handleSyncTravelDataPacket); - registrar.playToClient(ClientboundTravelTargetUpdatedPacket.TYPE, ClientboundTravelTargetUpdatedPacket.STREAM_CODEC, + registrar.playToClient(ClientboundEnderPOIUpdatedPacket.TYPE, ClientboundEnderPOIUpdatedPacket.STREAM_CODEC, ClientPayloadHandler.getInstance()::handleAddTravelTarget); registrar.playToClient(ClientboundTravelTargetRemovedPacket.TYPE, ClientboundTravelTargetRemovedPacket.STREAM_CODEC, diff --git a/enderio/src/main/java/com/enderio/enderio/foundation/network/ServerPayloadHandler.java b/enderio/src/main/java/com/enderio/enderio/foundation/network/ServerPayloadHandler.java index edb2ed72c3..cfde69d8d3 100644 --- a/enderio/src/main/java/com/enderio/enderio/foundation/network/ServerPayloadHandler.java +++ b/enderio/src/main/java/com/enderio/enderio/foundation/network/ServerPayloadHandler.java @@ -1,7 +1,7 @@ package com.enderio.enderio.foundation.network; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetApi; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOIApi; import com.enderio.enderio.content.filters.FilterSlot; import com.enderio.enderio.content.filters.fluid.FluidFilterSlot; import com.enderio.enderio.content.travel.TravelHandler; @@ -34,10 +34,10 @@ public void handleTravelRequest(ServerboundRequestTravelPacket packet, IPayloadC context.enqueueWork(() -> { var player = context.player(); - Optional target = TravelTargetApi.INSTANCE.get(player.level(), packet.pos()); + Optional target = EnderPOIApi.INSTANCE.get(player.level(), packet.pos()); // These errors should only ever be triggered if there's some form of desync - if (!TravelHandler.canBlockTeleport(player)) { + if (!TravelHandler.canTeleport(player)) { player.displayClientMessage(Component.nullToEmpty("ERROR: Cannot teleport"), true); return; } @@ -53,7 +53,7 @@ public void handleTravelRequest(ServerboundRequestTravelPacket packet, IPayloadC return; } - TravelHandler.blockTeleportTo(player.level(), player, target.get(), false); + target.get().onActivation(player.level(), player); }); } diff --git a/enderio/src/main/java/com/enderio/enderio/foundation/network/packets/ClientboundTravelTargetUpdatedPacket.java b/enderio/src/main/java/com/enderio/enderio/foundation/network/packets/ClientboundEnderPOIUpdatedPacket.java similarity index 50% rename from enderio/src/main/java/com/enderio/enderio/foundation/network/packets/ClientboundTravelTargetUpdatedPacket.java rename to enderio/src/main/java/com/enderio/enderio/foundation/network/packets/ClientboundEnderPOIUpdatedPacket.java index 8bf39d037f..9e97c86e2e 100644 --- a/enderio/src/main/java/com/enderio/enderio/foundation/network/packets/ClientboundTravelTargetUpdatedPacket.java +++ b/enderio/src/main/java/com/enderio/enderio/foundation/network/packets/ClientboundEnderPOIUpdatedPacket.java @@ -1,18 +1,18 @@ package com.enderio.enderio.foundation.network.packets; import com.enderio.enderio.EnderIO; -import com.enderio.enderio.api.travel.TravelTarget; +import com.enderio.enderio.api.poi.EnderPOI; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import org.jetbrains.annotations.Nullable; -public record ClientboundTravelTargetUpdatedPacket(@Nullable TravelTarget target) implements CustomPacketPayload { +public record ClientboundEnderPOIUpdatedPacket(@Nullable EnderPOI target) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(EnderIO.rl("add_travel_target")); + public static final Type TYPE = new Type<>(EnderIO.rl("add_ender_poi")); - public static final StreamCodec STREAM_CODEC = TravelTarget.STREAM_CODEC - .map(ClientboundTravelTargetUpdatedPacket::new, ClientboundTravelTargetUpdatedPacket::target); + public static final StreamCodec STREAM_CODEC = EnderPOI.STREAM_CODEC + .map(ClientboundEnderPOIUpdatedPacket::new, ClientboundEnderPOIUpdatedPacket::target); @Override public Type type() { diff --git a/enderio/src/main/java/com/enderio/enderio/init/EIOTravelTargets.java b/enderio/src/main/java/com/enderio/enderio/init/EIOTravelTargets.java index 165140ef59..6177a76300 100644 --- a/enderio/src/main/java/com/enderio/enderio/init/EIOTravelTargets.java +++ b/enderio/src/main/java/com/enderio/enderio/init/EIOTravelTargets.java @@ -2,9 +2,9 @@ import com.enderio.enderio.EnderIO; import com.enderio.enderio.api.EnderIORegistries; -import com.enderio.enderio.api.travel.TravelTarget; -import com.enderio.enderio.api.travel.TravelTargetSerializer; -import com.enderio.enderio.api.travel.TravelTargetType; +import com.enderio.enderio.api.poi.EnderPOI; +import com.enderio.enderio.api.poi.EnderPOISerializer; +import com.enderio.enderio.api.poi.EnderPOIType; import com.enderio.enderio.content.enderface.EnderfaceTravelTarget; import com.enderio.enderio.content.travel.travel_anchor.AnchorTravelTarget; import net.neoforged.bus.api.IEventBus; @@ -13,23 +13,23 @@ import java.util.function.Supplier; public class EIOTravelTargets { - public static final DeferredRegister> TRAVEL_TARGET_TYPES = DeferredRegister + public static final DeferredRegister> TRAVEL_TARGET_TYPES = DeferredRegister .create(EnderIORegistries.TRAVEL_TARGET_TYPES, EnderIO.MOD_ID); - public static final DeferredRegister> TRAVEL_TARGET_SERIALIZERS = DeferredRegister + public static final DeferredRegister> TRAVEL_TARGET_SERIALIZERS = DeferredRegister .create(EnderIORegistries.TRAVEL_TARGET_SERIALIZERS, EnderIO.MOD_ID); - public static final Supplier> TRAVEL_ANCHOR_TYPE = registerType( + public static final Supplier> TRAVEL_ANCHOR_TYPE = registerType( "travel_anchor"); - public static final Supplier> TRAVEL_ANCHOR_SERIALIZER = TRAVEL_TARGET_SERIALIZERS + public static final Supplier> TRAVEL_ANCHOR_SERIALIZER = TRAVEL_TARGET_SERIALIZERS .register("travel_anchor", AnchorTravelTarget.Serializer::new); - public static final Supplier> ENDERFACE_TYPE = registerType("enderface"); - public static final Supplier> ENDERFACE_SERIALIZER = TRAVEL_TARGET_SERIALIZERS + public static final Supplier> ENDERFACE_TYPE = registerType("enderface"); + public static final Supplier> ENDERFACE_SERIALIZER = TRAVEL_TARGET_SERIALIZERS .register("enderface", EnderfaceTravelTarget.Serializer::new); - private static Supplier> registerType(String name) { - return TRAVEL_TARGET_TYPES.register(name, TravelTargetType::simple); + private static Supplier> registerType(String name) { + return TRAVEL_TARGET_TYPES.register(name, EnderPOIType::simple); } public static void register(IEventBus bus) { diff --git a/enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.poi.EnderPOIApi b/enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.poi.EnderPOIApi new file mode 100644 index 0000000000..dfdbfb7665 --- /dev/null +++ b/enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.poi.EnderPOIApi @@ -0,0 +1,2 @@ +com.enderio.enderio.content.poi.EnderPOIApiImpl + diff --git a/enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.travel.TravelTargetApi b/enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.travel.TravelTargetApi deleted file mode 100644 index cba5b72fca..0000000000 --- a/enderio/src/main/resources/META-INF/services/com.enderio.enderio.api.travel.TravelTargetApi +++ /dev/null @@ -1 +0,0 @@ -com.enderio.enderio.content.travel.TravelTargetApiImpl