diff --git a/src/main/java/com/jenny/magic/items/TeleportScroll.java b/src/main/java/com/jenny/magic/items/TeleportScroll.java index dc141c1..8184a70 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScroll.java +++ b/src/main/java/com/jenny/magic/items/TeleportScroll.java @@ -1,12 +1,14 @@ package com.jenny.magic.items; import com.jenny.magic.config.ConfigServer; +import com.jenny.magic.networking.networking; +import com.jenny.magic.networking.packets.EffectS2C; +import com.jenny.magic.particles.effects; import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; @@ -45,7 +47,7 @@ public class TeleportScroll extends BaseItem { return level.dimension().location().toString(); } - private boolean locationSet(@NotNull CompoundTag cTag) { + static protected boolean locationSet(@NotNull CompoundTag cTag) { return cTag.contains("teleport_x") && cTag.contains("teleport_y") && cTag.contains("teleport_z"); } @@ -55,24 +57,23 @@ public class TeleportScroll extends BaseItem { } if (locationSet(itemStack.getTag()) && !player.isCrouching()) { if (dimCheck(player, itemStack.getTag())) { - if (level.isClientSide) { - spawnParticles(level, player.position().add(0, player.getEyeHeight(), 0), 20, 5, ParticleTypes.POOF, ParticleDirection.INWARD); - spawnParticles(level, getLocation(itemStack.getTag()).add(0, player.getEyeHeight(), 0), 20, 0.2, ParticleTypes.END_ROD, ParticleDirection.OUTWARD); - } else { + if (!level.isClientSide) { if (rangeCheck(player.position(), getLocation(itemStack.getTag()))) { Vec3 vec = getLocation(itemStack.getTag()); + networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_TELEPORT_ORIGIN, player.position().add(0, player.getEyeHeight(), 0)), (ServerPlayer) player); + networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_TELEPORT_TARGET, getLocation(itemStack.getTag()).add(0, player.getEyeHeight(), 0)), (ServerPlayer) player); player.teleportTo(vec.x, vec.y, vec.z); } else { - MessageDist(); + MessageDist(player); } } } else { - MessageWrongDim(); + MessageWrongDim(player); } } else { itemStack.setTag(setLocation(level, player, pos, itemStack.getTag())); if (level.isClientSide) { - MessageLocationSet(); + MessageLocationSet(player); } } } @@ -117,15 +118,15 @@ public class TeleportScroll extends BaseItem { return ConfigServer.C_TELEPORT_SCROLL_RANGE.get() == 0 || p1.subtract(p2).length() < ConfigServer.C_TELEPORT_SCROLL_RANGE.get(); } - protected void MessageLocationSet() { - Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.set", MODID))); + protected void MessageLocationSet(Player player) { + player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.set", MODID))); } - protected void MessageWrongDim() { - Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dim", MODID))); + protected void MessageWrongDim(Player player) { + player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dim", MODID))); } - protected void MessageDist() { - Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dist", MODID))); + protected void MessageDist(Player player) { + player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dist", MODID))); } } diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollBiome.java b/src/main/java/com/jenny/magic/items/TeleportScrollBiome.java index b25a839..5bab3f7 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollBiome.java +++ b/src/main/java/com/jenny/magic/items/TeleportScrollBiome.java @@ -1,5 +1,8 @@ package com.jenny.magic.items; +import com.jenny.magic.networking.networking; +import com.jenny.magic.networking.packets.EffectS2C; +import com.jenny.magic.particles.effects; import com.mojang.datafixers.util.Pair; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; @@ -8,6 +11,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; @@ -21,7 +25,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; -import java.util.function.Predicate; import static com.jenny.magic.Magic.MODID; @@ -49,16 +52,12 @@ public class TeleportScrollBiome extends BaseItem { protected void use(@NotNull Player player, ItemStack itemStack) { if (!player.level().isClientSide) { - Predicate> predicate = new Predicate>() { - @Override - public boolean test(@NotNull Holder biomeHolder) { - return biomeHolder.is(biome); - } - }; - Pair> pair = ((ServerLevel) player.level()).findClosestBiome3d(predicate, player.blockPosition(), 69000, 32, 64); + Pair> pair = ((ServerLevel) player.level()).findClosestBiome3d(biomeHolder -> biomeHolder.is(biome), player.blockPosition(), 69000, 32, 64); if (pair == null) { MessageBiomeNotFound(player); } else { + networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_TELEPORT_ORIGIN, player.position().add(0, player.getEyeHeight(), 0)), (ServerPlayer) player); + networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_TELEPORT_TARGET, pair.getFirst().getCenter().add(0, player.getEyeHeight(), 0)), (ServerPlayer) player); player.teleportTo(pair.getFirst().getX(), pair.getFirst().getY(), pair.getFirst().getZ()); } } diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java b/src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java index bc52808..6cc9c10 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java +++ b/src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java @@ -13,8 +13,13 @@ public class TeleportScrollConsumable extends TeleportScroll { @Override protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { - super.use(pos, player, itemStack, level); - itemStack.shrink(1); + if (itemStack.getTag() != null && locationSet(itemStack.getTag())) { + super.use(pos, player, itemStack, level); + itemStack.shrink(1); + } else { + super.use(pos, player, itemStack, level); + } + } } diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollRandom.java b/src/main/java/com/jenny/magic/items/TeleportScrollRandom.java index 1905a06..515e45d 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollRandom.java +++ b/src/main/java/com/jenny/magic/items/TeleportScrollRandom.java @@ -1,12 +1,16 @@ package com.jenny.magic.items; import com.jenny.magic.config.ConfigServer; +import com.jenny.magic.networking.networking; +import com.jenny.magic.networking.packets.EffectS2C; +import com.jenny.magic.particles.effects; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -47,9 +51,9 @@ public class TeleportScrollRandom extends BaseItem { if (!player.level().isClientSide) { if (itemStack.getTag() != null && itemStack.getTag().contains("teleport_x")) { Vec3 pos = getPos(itemStack.getTag()); + networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_TELEPORT_ORIGIN, player.position().add(0, player.getEyeHeight(), 0)), (ServerPlayer) player); + networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_TELEPORT_TARGET, pos.add(0, player.getEyeHeight(), 0)), (ServerPlayer) player); player.teleportTo(pos.x, pos.y, pos.z); - spawnParticles(player.level(), player.position().add(0, player.getEyeHeight(), 0), 20, 5, ParticleTypes.POOF, ParticleDirection.INWARD); - spawnParticles(player.level(), player.position().add(0, player.getEyeHeight(), 0), 20, 0.2, ParticleTypes.END_ROD, ParticleDirection.OUTWARD); itemStack.shrink(1); } else { int maxDist = ConfigServer.C_TELEPORT_SCROLL_RANGE_RANDOM.get(); diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollRandomBiome.java b/src/main/java/com/jenny/magic/items/TeleportScrollRandomBiome.java deleted file mode 100644 index 87b36b0..0000000 --- a/src/main/java/com/jenny/magic/items/TeleportScrollRandomBiome.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.jenny.magic.items; - -import com.mojang.datafixers.util.Pair; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.Biome; -import net.minecraftforge.registries.ForgeRegistries; -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; -import java.util.Objects; -import java.util.function.Predicate; - -public class TeleportScrollRandomBiome extends BaseItem { - public TeleportScrollRandomBiome(Properties pProperties) { - super(pProperties); - } - - @Override - public @NotNull InteractionResultHolder use(@NotNull Level pLevel, @NotNull Player pPlayer, @NotNull InteractionHand pUsedHand) { - use(pPlayer, pPlayer.getItemInHand(pUsedHand)); - return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand)); - } - - @Override - public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) { - use(pContext.getPlayer(), pContext.getItemInHand()); - return InteractionResult.SUCCESS; - } - - protected void use(@NotNull Player player, ItemStack itemStack) { - if (!player.level().isClientSide && itemStack.getTag() != null && itemStack.getTag().contains("teleport_biome")) { - Biome biome = ForgeRegistries.BIOMES.getValue(ResourceLocation.parse(itemStack.getTag().getString("teleport_biome"))); - Predicate> predicate = new Predicate>() { - @Override - public boolean test(@NotNull Holder biomeHolder) { - return Objects.equals(biomeHolder.get().toString(), biome.toString()); - } - }; - Pair> pair = ((ServerLevel) player.level()).findClosestBiome3d(predicate, player.blockPosition(), 69000, 32, 64); - if (pair == null) { - System.out.println("error: biome not found"); - } else { - player.teleportTo(pair.getFirst().getX(), pair.getFirst().getY(), pair.getFirst().getZ()); - } - } else { - setBiome(player.level(), itemStack); - } - } - - protected void setBiome(Level level, ItemStack itemStack) { - //ForgeRegistries.BIOMES.getEntries().stream().toList().get().; - Collection list = ForgeRegistries.BIOMES.getValues(); - //String biomeStr = list.get(level.getRandom().nextInt(list.size())).toString(); - - CompoundTag compoundTag = itemStack.getTag(); - compoundTag = compoundTag != null ? compoundTag : new CompoundTag(); - //compoundTag.putString("teleport_biome", biomeStr); - itemStack.setTag(compoundTag); - } -} diff --git a/src/main/java/com/jenny/magic/items/WandVacuum.java b/src/main/java/com/jenny/magic/items/WandVacuum.java index 13eaea5..e1c854a 100644 --- a/src/main/java/com/jenny/magic/items/WandVacuum.java +++ b/src/main/java/com/jenny/magic/items/WandVacuum.java @@ -2,6 +2,7 @@ package com.jenny.magic.items; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.EffectS2C; +import com.jenny.magic.particles.effects; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -38,7 +39,7 @@ public class WandVacuum extends BaseItem { for (ItemEntity e : level.getEntitiesOfClass(ItemEntity.class, aabb)) { e.playerTouch(player); } - networking.sendToPlayer(new EffectS2C(EffectS2C.Effect.WAND_VACUUM, player.position(), player.position()), (ServerPlayer) player); + networking.sendToPlayer(new EffectS2C(effects.EFFECT.WAND_VACUUM, player.position()), (ServerPlayer) player); } } } diff --git a/src/main/java/com/jenny/magic/mana/ManaServer.java b/src/main/java/com/jenny/magic/mana/ManaServer.java deleted file mode 100644 index 25f7d00..0000000 --- a/src/main/java/com/jenny/magic/mana/ManaServer.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.jenny.magic.mana; - -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.server.ServerLifecycleEvent; -import net.minecraftforge.fml.common.Mod; - -import java.util.HashMap; - -import static com.jenny.magic.Magic.MODID; - -@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.DEDICATED_SERVER) -public class ManaServer { - public static HashMap mana = new HashMap<>(); - - public static void serverLoad(ServerLifecycleEvent event) { - if event. - } - - public st -} diff --git a/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java b/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java index 51fc754..586abb9 100644 --- a/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java +++ b/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java @@ -5,23 +5,20 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkEvent; -import javax.annotation.Nullable; import java.util.function.Supplier; public class EffectS2C { - private final Effect effectID; - private final Vec3 vector1, vector2; + private final effects.EFFECT effectID; + private final Vec3 vector1; - public EffectS2C(Effect effectID, @Nullable Vec3 origin, @Nullable Vec3 target) { + public EffectS2C(effects.EFFECT effectID, Vec3 origin) { this.effectID = effectID; this.vector1 = origin; - this.vector2 = target; } public EffectS2C(FriendlyByteBuf buf) { - this.effectID = Effect.values()[buf.getByte(2)]; + this.effectID = effects.EFFECT.values()[buf.getByte(2)]; this.vector1 = new Vec3(buf.getFloat(3), buf.getFloat(7), buf.getFloat(11)); - this.vector2 = new Vec3(buf.getFloat(15), buf.getFloat(19), buf.getFloat(23)); } public void toBytes(FriendlyByteBuf buf) { @@ -30,22 +27,13 @@ public class EffectS2C { buf.writeFloat((float) vector1.x); buf.writeFloat((float) vector1.y); buf.writeFloat((float) vector1.z); - buf.writeFloat((float) vector2.x); - buf.writeFloat((float) vector2.y); - buf.writeFloat((float) vector2.z); } public boolean handle(Supplier supplier) { NetworkEvent.Context context = supplier.get(); context.enqueueWork(() -> { - System.out.println("test069 " + this.effectID + " " + this.vector1 + " " + this.vector2); - effects.executeEffect(this.effectID, this.vector1, this.vector2); + effects.executeEffect(this.effectID, this.vector1); }); return true; } - - public enum Effect { - SCROLL_HEALTH, - WAND_VACUUM - } } diff --git a/src/main/java/com/jenny/magic/particles/effects.java b/src/main/java/com/jenny/magic/particles/effects.java index 270cbcf..839955b 100644 --- a/src/main/java/com/jenny/magic/particles/effects.java +++ b/src/main/java/com/jenny/magic/particles/effects.java @@ -1,6 +1,5 @@ package com.jenny.magic.particles; -import com.jenny.magic.networking.packets.EffectS2C; import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.util.RandomSource; @@ -10,19 +9,34 @@ import net.minecraft.world.phys.Vec3; import javax.annotation.Nullable; public class effects { - public static void executeEffect(EffectS2C.Effect effect, @Nullable Vec3 origin, @Nullable Vec3 destination) { - if (effect == EffectS2C.Effect.WAND_VACUUM) { - wandVacuum(origin, destination); + public static void executeEffect(EFFECT effect, @Nullable Vec3 origin) { + switch (effect) { + case WAND_VACUUM -> wandVacuum(origin); + case SCROLL_TELEPORT_ORIGIN -> teleportOrigin(origin); + case SCROLL_TELEPORT_TARGET -> teleportTarget(origin); } } - private static void scrollTeleport(Vec3 origin, Vec3 destination) { + private static void teleportOrigin(Vec3 v) { + for (int i = 0; i < 20; i++) { + Vec3 randPos = randPos(1); + Vec3 pos = v.add(randPos); + Vec3 delta = randPos.scale(-0.1); + level().addParticle(ParticleTypes.GLOW_SQUID_INK, pos.x, pos.y, pos.z, delta.x, delta.y, delta.z); + } } - private static void wandVacuum(Vec3 origin, Vec3 destination) { + private static void teleportTarget(Vec3 v) { + for (int i = 0; i < 20; i++) { + Vec3 randPos = randPosRandDist(0.2f); + level().addParticle(ParticleTypes.GLOW_SQUID_INK, v.x, v.y, v.z, randPos.x, randPos.y, randPos.z); + } + } + + private static void wandVacuum(Vec3 v) { for (int i = 0; i < 20; i++) { Vec3 randPos = randPos2D(5); - Vec3 pos = origin.add(randPos); + Vec3 pos = v.add(randPos); Vec3 delta = randPos.scale(-0.1).add(0, 0.2, 0); level().addParticle(ParticleTypes.GLOW_SQUID_INK, pos.x, pos.y, pos.z, delta.x, delta.y, delta.z); } @@ -56,4 +70,11 @@ public class effects { private static RandomSource rng() { return level().getRandom(); } + + public enum EFFECT { + SCROLL_TELEPORT_ORIGIN, + SCROLL_TELEPORT_TARGET, + SCROLL_HEALTH, + WAND_VACUUM + } }