completely server-side effects

This commit is contained in:
Jenny 2025-03-28 10:10:05 +01:00
parent 3dede03182
commit 53d86302b6
Signed by: Jenny
GPG Key ID: 4A98012FB1C39311
9 changed files with 72 additions and 144 deletions

View File

@ -1,12 +1,14 @@
package com.jenny.magic.items; package com.jenny.magic.items;
import com.jenny.magic.config.ConfigServer; 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.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionResultHolder;
@ -45,7 +47,7 @@ public class TeleportScroll extends BaseItem {
return level.dimension().location().toString(); 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"); 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 (locationSet(itemStack.getTag()) && !player.isCrouching()) {
if (dimCheck(player, itemStack.getTag())) { if (dimCheck(player, itemStack.getTag())) {
if (level.isClientSide) { 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 (rangeCheck(player.position(), getLocation(itemStack.getTag()))) { if (rangeCheck(player.position(), getLocation(itemStack.getTag()))) {
Vec3 vec = 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); player.teleportTo(vec.x, vec.y, vec.z);
} else { } else {
MessageDist(); MessageDist(player);
} }
} }
} else { } else {
MessageWrongDim(); MessageWrongDim(player);
} }
} else { } else {
itemStack.setTag(setLocation(level, player, pos, itemStack.getTag())); itemStack.setTag(setLocation(level, player, pos, itemStack.getTag()));
if (level.isClientSide) { 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(); return ConfigServer.C_TELEPORT_SCROLL_RANGE.get() == 0 || p1.subtract(p2).length() < ConfigServer.C_TELEPORT_SCROLL_RANGE.get();
} }
protected void MessageLocationSet() { protected void MessageLocationSet(Player player) {
Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.set", MODID))); player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.set", MODID)));
} }
protected void MessageWrongDim() { protected void MessageWrongDim(Player player) {
Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dim", MODID))); player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dim", MODID)));
} }
protected void MessageDist() { protected void MessageDist(Player player) {
Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dist", MODID))); player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dist", MODID)));
} }
} }

View File

@ -1,5 +1,8 @@
package com.jenny.magic.items; 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 com.mojang.datafixers.util.Pair;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -8,6 +11,7 @@ import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionResultHolder;
@ -21,7 +25,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.List; import java.util.List;
import java.util.function.Predicate;
import static com.jenny.magic.Magic.MODID; import static com.jenny.magic.Magic.MODID;
@ -49,16 +52,12 @@ public class TeleportScrollBiome extends BaseItem {
protected void use(@NotNull Player player, ItemStack itemStack) { protected void use(@NotNull Player player, ItemStack itemStack) {
if (!player.level().isClientSide) { if (!player.level().isClientSide) {
Predicate<Holder<Biome>> predicate = new Predicate<Holder<Biome>>() { Pair<BlockPos, Holder<Biome>> pair = ((ServerLevel) player.level()).findClosestBiome3d(biomeHolder -> biomeHolder.is(biome), player.blockPosition(), 69000, 32, 64);
@Override
public boolean test(@NotNull Holder<Biome> biomeHolder) {
return biomeHolder.is(biome);
}
};
Pair<BlockPos, Holder<Biome>> pair = ((ServerLevel) player.level()).findClosestBiome3d(predicate, player.blockPosition(), 69000, 32, 64);
if (pair == null) { if (pair == null) {
MessageBiomeNotFound(player); MessageBiomeNotFound(player);
} else { } 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()); player.teleportTo(pair.getFirst().getX(), pair.getFirst().getY(), pair.getFirst().getZ());
} }
} }

View File

@ -13,8 +13,13 @@ public class TeleportScrollConsumable extends TeleportScroll {
@Override @Override
protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) {
super.use(pos, player, itemStack, level); if (itemStack.getTag() != null && locationSet(itemStack.getTag())) {
itemStack.shrink(1); super.use(pos, player, itemStack, level);
itemStack.shrink(1);
} else {
super.use(pos, player, itemStack, level);
}
} }
} }

View File

@ -1,12 +1,16 @@
package com.jenny.magic.items; package com.jenny.magic.items;
import com.jenny.magic.config.ConfigServer; 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.ChatFormatting;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
@ -47,9 +51,9 @@ public class TeleportScrollRandom extends BaseItem {
if (!player.level().isClientSide) { if (!player.level().isClientSide) {
if (itemStack.getTag() != null && itemStack.getTag().contains("teleport_x")) { if (itemStack.getTag() != null && itemStack.getTag().contains("teleport_x")) {
Vec3 pos = getPos(itemStack.getTag()); 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); 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); itemStack.shrink(1);
} else { } else {
int maxDist = ConfigServer.C_TELEPORT_SCROLL_RANGE_RANDOM.get(); int maxDist = ConfigServer.C_TELEPORT_SCROLL_RANGE_RANDOM.get();

View File

@ -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<ItemStack> 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<Holder<Biome>> predicate = new Predicate<Holder<Biome>>() {
@Override
public boolean test(@NotNull Holder<Biome> biomeHolder) {
return Objects.equals(biomeHolder.get().toString(), biome.toString());
}
};
Pair<BlockPos, Holder<Biome>> 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<Biome> 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);
}
}

View File

@ -2,6 +2,7 @@ package com.jenny.magic.items;
import com.jenny.magic.networking.networking; import com.jenny.magic.networking.networking;
import com.jenny.magic.networking.packets.EffectS2C; import com.jenny.magic.networking.packets.EffectS2C;
import com.jenny.magic.particles.effects;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
@ -38,7 +39,7 @@ public class WandVacuum extends BaseItem {
for (ItemEntity e : level.getEntitiesOfClass(ItemEntity.class, aabb)) { for (ItemEntity e : level.getEntitiesOfClass(ItemEntity.class, aabb)) {
e.playerTouch(player); 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);
} }
} }
} }

View File

@ -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<String, Integer> mana = new HashMap<>();
public static void serverLoad(ServerLifecycleEvent event) {
if event.
}
public st
}

View File

@ -5,23 +5,20 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import javax.annotation.Nullable;
import java.util.function.Supplier; import java.util.function.Supplier;
public class EffectS2C { public class EffectS2C {
private final Effect effectID; private final effects.EFFECT effectID;
private final Vec3 vector1, vector2; 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.effectID = effectID;
this.vector1 = origin; this.vector1 = origin;
this.vector2 = target;
} }
public EffectS2C(FriendlyByteBuf buf) { 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.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) { public void toBytes(FriendlyByteBuf buf) {
@ -30,22 +27,13 @@ public class EffectS2C {
buf.writeFloat((float) vector1.x); buf.writeFloat((float) vector1.x);
buf.writeFloat((float) vector1.y); buf.writeFloat((float) vector1.y);
buf.writeFloat((float) vector1.z); buf.writeFloat((float) vector1.z);
buf.writeFloat((float) vector2.x);
buf.writeFloat((float) vector2.y);
buf.writeFloat((float) vector2.z);
} }
public boolean handle(Supplier<NetworkEvent.Context> supplier) { public boolean handle(Supplier<NetworkEvent.Context> supplier) {
NetworkEvent.Context context = supplier.get(); NetworkEvent.Context context = supplier.get();
context.enqueueWork(() -> { context.enqueueWork(() -> {
System.out.println("test069 " + this.effectID + " " + this.vector1 + " " + this.vector2); effects.executeEffect(this.effectID, this.vector1);
effects.executeEffect(this.effectID, this.vector1, this.vector2);
}); });
return true; return true;
} }
public enum Effect {
SCROLL_HEALTH,
WAND_VACUUM
}
} }

View File

@ -1,6 +1,5 @@
package com.jenny.magic.particles; package com.jenny.magic.particles;
import com.jenny.magic.networking.packets.EffectS2C;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
@ -10,19 +9,34 @@ import net.minecraft.world.phys.Vec3;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class effects { public class effects {
public static void executeEffect(EffectS2C.Effect effect, @Nullable Vec3 origin, @Nullable Vec3 destination) { public static void executeEffect(EFFECT effect, @Nullable Vec3 origin) {
if (effect == EffectS2C.Effect.WAND_VACUUM) { switch (effect) {
wandVacuum(origin, destination); 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++) { for (int i = 0; i < 20; i++) {
Vec3 randPos = randPos2D(5); 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); 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); 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() { private static RandomSource rng() {
return level().getRandom(); return level().getRandom();
} }
public enum EFFECT {
SCROLL_TELEPORT_ORIGIN,
SCROLL_TELEPORT_TARGET,
SCROLL_HEALTH,
WAND_VACUUM
}
} }