add world min y and max y check + clamp the core y to min y and max y

This commit is contained in:
Chayapak 2023-08-19 15:52:30 +07:00
parent 5cbeeefe6f
commit 7a3b5f4baf
4 changed files with 77 additions and 6 deletions

View file

@ -53,6 +53,8 @@ public class Bot {
public ChatPlugin chat;
public CommandSpyPlugin commandSpy;
public PositionPlugin position;
public ServerPluginsManagerPlugin serverPluginsManager;
public PluginCheckerPlugin pluginChecker;
public SelfCarePlugin selfCare;
public CorePlugin core;
public TeamPlugin team;
@ -75,8 +77,7 @@ public class Bot {
public PacketSnifferPlugin packetSniffer;
public VoiceChatPlugin voiceChat;
public TagPlugin tag;
public ServerPluginsManagerPlugin serverPluginsManager;
public PluginCheckerPlugin pluginChecker;
public WorldPlugin world;
public Bot (Configuration.BotOption botOption, List<Bot> bots, Configuration config) {
this.host = botOption.host;
@ -101,6 +102,8 @@ public class Bot {
this.chat = new ChatPlugin(this);
this.commandSpy = new CommandSpyPlugin(this);
this.position = new PositionPlugin(this);
this.serverPluginsManager = new ServerPluginsManagerPlugin(this);
this.pluginChecker = new PluginCheckerPlugin(this);
this.selfCare = new SelfCarePlugin(this);
this.core = new CorePlugin(this);
this.team = new TeamPlugin(this);
@ -123,8 +126,7 @@ public class Bot {
this.packetSniffer = new PacketSnifferPlugin(this);
this.voiceChat = new VoiceChatPlugin(this);
this.tag = new TagPlugin(this);
this.serverPluginsManager = new ServerPluginsManagerPlugin(this);
this.pluginChecker = new PluginCheckerPlugin(this);
this.world = new WorldPlugin(this);
for (Listener listener : listeners) listener.loadedPlugins();

View file

@ -22,6 +22,7 @@ import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.event.session.DisconnectedEvent;
import com.github.steveice10.packetlib.packet.Packet;
import land.chipmunk.chayapak.chomens_bot.Bot;
import land.chipmunk.chayapak.chomens_bot.util.MathUtilities;
import org.cloudburstmc.math.vector.Vector3i;
import java.util.ArrayList;
@ -330,11 +331,11 @@ public class CorePlugin extends PositionPlugin.Listener {
"minecraft:fill %s %s %s %s %s %s minecraft:command_block{CustomName:'%s'}",
from.getX(),
from.getY(),
MathUtilities.clamp(from.getY(), bot.world.minY, bot.world.maxY),
from.getZ(),
to.getX(),
to.getY(),
MathUtilities.clamp(to.getY(), bot.world.minY, bot.world.maxY),
to.getZ(),
bot.config.core.customName

View file

@ -0,0 +1,64 @@
package land.chipmunk.chayapak.chomens_bot.plugins;
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket;
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundRespawnPacket;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.Tag;
import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.packet.Packet;
import land.chipmunk.chayapak.chomens_bot.Bot;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
public class WorldPlugin extends Bot.Listener {
public int minY = 0;
public int maxY = 256;
public CompoundTag registry = null;
private final List<Listener> listeners = new ArrayList<>();
public WorldPlugin (Bot bot) {
bot.addListener(this);
}
@Override
public void packetReceived(Session session, Packet packet) {
if (packet instanceof ClientboundLoginPacket) packetReceived((ClientboundLoginPacket) packet);
else if (packet instanceof ClientboundRespawnPacket) packetReceived((ClientboundRespawnPacket) packet);
}
@SuppressWarnings("unchecked")
private void worldChanged (String dimension) {
final Tag dimensionType = ((LinkedHashMap<String, Tag>) registry.get("minecraft:dimension_type").getValue()).get("value");
final ArrayList<CompoundTag> dimensions = (ArrayList<CompoundTag>) dimensionType.getValue();
final CompoundTag currentDimension = dimensions.stream()
.filter((eachDimension) -> eachDimension.get("name").getValue().equals(dimension))
.toArray(CompoundTag[]::new)[0];
final CompoundTag element = currentDimension.get("element");
minY = (int) element.get("min_y").getValue();
maxY = (int) element.get("height").getValue();
for (Listener listener : listeners) listener.worldChanged(dimension);
}
public void packetReceived (ClientboundLoginPacket packet) {
registry = packet.getRegistry();
worldChanged(packet.getDimension());
}
public void packetReceived (ClientboundRespawnPacket packet) {
worldChanged(packet.getDimension());
}
public static class Listener {
public void worldChanged (String dimension) {}
}
}

View file

@ -7,6 +7,10 @@ public class MathUtilities {
);
}
public static int clamp (int value, int min, int max) {
return Math.max(Math.min(value, max), min);
}
public static float clamp (float value, float min, float max) {
return Math.max(Math.min(value, max), min);
}