package moe.nekojimi.dimensionwalker; import com.mojang.logging.LogUtils; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.core.Registry; import net.minecraft.server.MinecraftServer; import net.minecraft.server.commands.TeleportCommand; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.NetherPortalBlock; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.List; import java.util.Collections; import java.util.Random; import java.util.logging.Logger; import java.util.stream.StreamSupport; public class DimensionwalkerItem extends Item { private static DeferredRegister DIMENSION_REGISTER = DeferredRegister.create(Registry.DIMENSION_REGISTRY, DimensionwalkerMod.MODID); private static final org.slf4j.Logger LOGGER = LogUtils.getLogger(); public DimensionwalkerItem() { super(new Item.Properties().tab(CreativeModeTab.TAB_TOOLS)); } @Override public @NotNull InteractionResultHolder use(Level level, @NotNull Player player, @NotNull InteractionHand hand) { if (!level.isClientSide()) { MinecraftServer server = level.getServer(); if (server != null) { Iterable allLevels = server.getAllLevels(); List levels = new java.util.ArrayList<>(StreamSupport.stream(allLevels.spliterator(), false).toList()); levels.remove((ServerLevel) level); ServerLevel destination = levels.get(new Random().nextInt(levels.size())); // server.getPlayerList().getPlayer(player.getUUID()).teleportTo(destination, player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot()); ServerPlayer serverPlayer = server.getPlayerList().getPlayer(player.getUUID()); if (serverPlayer != null) serverPlayer.changeDimension(destination, DimensionwalkerTeleporter.instance()); else LOGGER.warn("Can't teleport, serverPlayer == null"); } else LOGGER.warn("Can't teleport, server == null"); } return super.use(level, player, hand); } }