completely server-side effects
This commit is contained in:
		
							parent
							
								
									3dede03182
								
							
						
					
					
						commit
						53d86302b6
					
				| @ -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))); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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<Holder<Biome>> predicate = new Predicate<Holder<Biome>>() { | ||||
|                 @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); | ||||
|             Pair<BlockPos, Holder<Biome>> 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()); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @ -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); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -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(); | ||||
|  | ||||
| @ -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); | ||||
|     } | ||||
| } | ||||
| @ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
| } | ||||
| @ -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<NetworkEvent.Context> 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 | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user