Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.coderandom.etheriacraft.procedures;
- import net.minecraft.resources.ResourceLocation;
- import net.minecraft.util.RandomSource;
- import net.minecraft.world.level.Level;
- import net.minecraft.world.item.ItemStack;
- import net.minecraft.world.entity.Entity;
- import net.minecraft.world.effect.MobEffectInstance;
- import net.minecraft.server.level.ServerPlayer;
- import net.minecraft.server.level.ServerLevel;
- import net.minecraft.resources.ResourceKey;
- import net.minecraft.network.protocol.game.ClientboundUpdateMobEffectPacket;
- import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket;
- import net.minecraft.network.protocol.game.ClientboundLevelEventPacket;
- import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
- import net.minecraft.core.BlockPos;
- import net.coderandom.etheriacraft.EtheriaCraftMod;
- public class FocusedEyeOfEnderRightClickedCUSTOMProcedure {
- public static double execute(Entity entity, ItemStack itemstack) {
- if (entity == null) {
- return 0;
- }
- if (entity.isShiftKeyDown()) {
- saveLocationData(entity, itemstack);
- return 1;
- }
- if (itemstack.getOrCreateTag().getBoolean("canTeleport")) {
- if (isDimensionChanged(entity, itemstack)) {
- handleDimensionChange(entity, itemstack);
- }
- applyRotationAndTeleport(entity, itemstack);
- damageItem(itemstack);
- }
- return 0;
- }
- private static void saveLocationData(Entity entity, ItemStack itemstack) {
- itemstack.getOrCreateTag().putString("dimension", entity.level().dimension().location().toString());
- itemstack.getOrCreateTag().putDouble("teleportX", entity.getX());
- itemstack.getOrCreateTag().putDouble("teleportY", entity.getY());
- itemstack.getOrCreateTag().putDouble("teleportZ", entity.getZ());
- itemstack.getOrCreateTag().putDouble("yaw", entity.getYRot());
- itemstack.getOrCreateTag().putDouble("pitch", entity.getXRot());
- itemstack.getOrCreateTag().putBoolean("canTeleport", true);
- EtheriaCraftMod.LOGGER.debug(entity.level().dimension());
- }
- private static boolean isDimensionChanged(Entity entity, ItemStack itemstack) {
- return !itemstack.getOrCreateTag().getString("dimension").equals(entity.level().dimension().location().toString());
- }
- private static void handleDimensionChange(Entity entity, ItemStack itemstack) {
- String dimensionTag = itemstack.getOrCreateTag().getString("dimension");
- if (entity instanceof ServerPlayer serverPlayer) {
- ServerLevel nextLevel = null;
- if (dimensionTag.contains("minecraft:overworld")) {
- nextLevel = serverPlayer.server.getLevel(Level.OVERWORLD);
- } else if (dimensionTag.contains("minecraft:the_nether")) {
- nextLevel = serverPlayer.server.getLevel(Level.NETHER);
- } else if (dimensionTag.contains("minecraft:the_end")) {
- nextLevel = serverPlayer.server.getLevel(Level.END);
- }
- if (nextLevel != null) {
- serverPlayer.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.WIN_GAME, 0));
- serverPlayer.teleportTo(nextLevel, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), serverPlayer.getYRot(), serverPlayer.getXRot());
- serverPlayer.connection.send(new ClientboundPlayerAbilitiesPacket(serverPlayer.getAbilities()));
- for (MobEffectInstance effectInstance : serverPlayer.getActiveEffects()) {
- serverPlayer.connection.send(new ClientboundUpdateMobEffectPacket(serverPlayer.getId(), effectInstance));
- }
- serverPlayer.connection.send(new ClientboundLevelEventPacket(1032, BlockPos.ZERO, 0, false));
- }
- }
- }
- private static void applyRotationAndTeleport(Entity entity, ItemStack itemstack) {
- entity.setYRot((float) itemstack.getOrCreateTag().getDouble("yaw"));
- entity.setXRot((float) itemstack.getOrCreateTag().getDouble("pitch"));
- entity.setYBodyRot(entity.getYRot());
- entity.setYHeadRot(entity.getYRot());
- entity.yRotO = entity.getYRot();
- entity.xRotO = entity.getXRot();
- entity.teleportTo(itemstack.getOrCreateTag().getDouble("teleportX"), itemstack.getOrCreateTag().getDouble("teleportY"), itemstack.getOrCreateTag().getDouble("teleportZ"));
- if (entity instanceof ServerPlayer player) {
- player.connection.teleport(itemstack.getOrCreateTag().getDouble("teleportX"), itemstack.getOrCreateTag().getDouble("teleportY"), itemstack.getOrCreateTag().getDouble("teleportZ"), entity.getYRot(), entity.getXRot());
- }
- }
- private static void damageItem(ItemStack itemstack) {
- if (itemstack.hurt(1, RandomSource.create(), null)) {
- itemstack.shrink(1);
- itemstack.setDamageValue(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement