Fix RTP, update libzontreck
This commit is contained in:
parent
deda27d0fb
commit
21c349ef3c
22 changed files with 192 additions and 149 deletions
|
@ -89,7 +89,7 @@ minecraft {
|
||||||
|
|
||||||
server {
|
server {
|
||||||
property 'forge.enabledGameTestNamespaces', mod_id
|
property 'forge.enabledGameTestNamespaces', mod_id
|
||||||
args '--nogui'
|
//args '--nogui'
|
||||||
}
|
}
|
||||||
|
|
||||||
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
org.gradle.jvmargs=-Xmx3G
|
org.gradle.jvmargs=-Xmx3G
|
||||||
org.gradle.daemon=false
|
org.gradle.daemon=false
|
||||||
|
|
||||||
libzontreck=1.10.010224.1940
|
libzontreck=1.10.011024.0312
|
||||||
|
|
||||||
## Environment Properties
|
## Environment Properties
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ mod_name=Aria's Essentials
|
||||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=GPLv3
|
mod_license=GPLv3
|
||||||
# The mod version. See https://semver.org/
|
# The mod version. See https://semver.org/
|
||||||
mod_version=1.2.010224.2002
|
mod_version=1.2.011124.0032
|
||||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||||
# This should match the base package used for the mod sources.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import dev.zontreck.ariaslib.util.DelayedExecutorService;
|
import dev.zontreck.ariaslib.util.DelayedExecutorService;
|
||||||
import dev.zontreck.essentials.client.Keybindings;
|
import dev.zontreck.essentials.client.Keybindings;
|
||||||
|
@ -14,6 +15,7 @@ import dev.zontreck.essentials.configs.AEServerConfig;
|
||||||
import dev.zontreck.essentials.events.TeleportEvent;
|
import dev.zontreck.essentials.events.TeleportEvent;
|
||||||
import dev.zontreck.essentials.gui.HeartsRenderer;
|
import dev.zontreck.essentials.gui.HeartsRenderer;
|
||||||
import dev.zontreck.essentials.networking.ModMessages;
|
import dev.zontreck.essentials.networking.ModMessages;
|
||||||
|
import dev.zontreck.essentials.rtp.RTPCaches;
|
||||||
import dev.zontreck.essentials.rtp.RTPCachesEventHandlers;
|
import dev.zontreck.essentials.rtp.RTPCachesEventHandlers;
|
||||||
import dev.zontreck.essentials.util.BackPositionCaches;
|
import dev.zontreck.essentials.util.BackPositionCaches;
|
||||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||||
|
@ -50,6 +52,9 @@ public class AriasEssentials {
|
||||||
public static final Logger LOGGER = LogUtils.getLogger();
|
public static final Logger LOGGER = LogUtils.getLogger();
|
||||||
public static boolean ALIVE;
|
public static boolean ALIVE;
|
||||||
public static Map<UUID, Homes> player_homes = new HashMap<>();
|
public static Map<UUID, Homes> player_homes = new HashMap<>();
|
||||||
|
public static boolean DEBUG = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public AriasEssentials()
|
public AriasEssentials()
|
||||||
{
|
{
|
||||||
|
@ -71,6 +76,7 @@ public class AriasEssentials {
|
||||||
MinecraftForge.EVENT_BUS.register(new CommandRegister());
|
MinecraftForge.EVENT_BUS.register(new CommandRegister());
|
||||||
MinecraftForge.EVENT_BUS.register(new ForgeEventsHandler());
|
MinecraftForge.EVENT_BUS.register(new ForgeEventsHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new RTPCachesEventHandlers());
|
MinecraftForge.EVENT_BUS.register(new RTPCachesEventHandlers());
|
||||||
|
MinecraftForge.EVENT_BUS.register(RTPCachesEventHandlers.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -104,6 +110,11 @@ public class AriasEssentials {
|
||||||
public void onServerStop(final ServerStoppingEvent ev)
|
public void onServerStop(final ServerStoppingEvent ev)
|
||||||
{
|
{
|
||||||
ALIVE=false;
|
ALIVE=false;
|
||||||
|
LOGGER.info("Tearing down Aria's Essentials functions and tasks");
|
||||||
|
DelayedExecutorService.stop();
|
||||||
|
|
||||||
|
DelayedExecutorService.getInstance().EXECUTORS.clear();
|
||||||
|
RTPCaches.Locations.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent (priority = EventPriority.HIGHEST)
|
@SubscribeEvent (priority = EventPriority.HIGHEST)
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.mojang.brigadier.CommandDispatcher;
|
||||||
import com.mojang.brigadier.arguments.BoolArgumentType;
|
import com.mojang.brigadier.arguments.BoolArgumentType;
|
||||||
import dev.zontreck.essentials.Messages;
|
import dev.zontreck.essentials.Messages;
|
||||||
import dev.zontreck.essentials.networking.ModMessages;
|
import dev.zontreck.essentials.networking.ModMessages;
|
||||||
import dev.zontreck.essentials.networking.S2CUpdateHearts;
|
import dev.zontreck.essentials.networking.packets.s2c.S2CUpdateHearts;
|
||||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
import net.minecraft.commands.Commands;
|
||||||
|
|
|
@ -9,19 +9,13 @@ import dev.zontreck.essentials.Messages;
|
||||||
import dev.zontreck.essentials.commands.teleport.TeleportActioner;
|
import dev.zontreck.essentials.commands.teleport.TeleportActioner;
|
||||||
import dev.zontreck.essentials.commands.teleport.TeleportContainer;
|
import dev.zontreck.essentials.commands.teleport.TeleportContainer;
|
||||||
import dev.zontreck.essentials.commands.teleport.TeleportDestination;
|
import dev.zontreck.essentials.commands.teleport.TeleportDestination;
|
||||||
import dev.zontreck.essentials.configs.AEServerConfig;
|
|
||||||
import dev.zontreck.essentials.homes.Home;
|
import dev.zontreck.essentials.homes.Home;
|
||||||
import dev.zontreck.essentials.homes.NoSuchHomeException;
|
import dev.zontreck.essentials.exceptions.NoSuchHomeException;
|
||||||
import dev.zontreck.libzontreck.currency.Bank;
|
|
||||||
import dev.zontreck.libzontreck.currency.Transaction;
|
|
||||||
import dev.zontreck.libzontreck.exceptions.InvalidSideException;
|
|
||||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
import net.minecraft.commands.Commands;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
|
|
||||||
public class HomeCommand {
|
public class HomeCommand {
|
||||||
public static void register(CommandDispatcher<CommandSourceStack> dispatcher)
|
public static void register(CommandDispatcher<CommandSourceStack> dispatcher)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,7 @@ import dev.zontreck.libzontreck.chat.Clickable;
|
||||||
import dev.zontreck.libzontreck.chat.HoverTip;
|
import dev.zontreck.libzontreck.chat.HoverTip;
|
||||||
import dev.zontreck.libzontreck.chestgui.ChestGUI;
|
import dev.zontreck.libzontreck.chestgui.ChestGUI;
|
||||||
import dev.zontreck.libzontreck.chestgui.ChestGUIButton;
|
import dev.zontreck.libzontreck.chestgui.ChestGUIButton;
|
||||||
|
import dev.zontreck.libzontreck.chestgui.ChestGUIIdentifier;
|
||||||
import dev.zontreck.libzontreck.lore.LoreEntry;
|
import dev.zontreck.libzontreck.lore.LoreEntry;
|
||||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||||
import dev.zontreck.libzontreck.vectors.Vector2i;
|
import dev.zontreck.libzontreck.vectors.Vector2i;
|
||||||
|
@ -29,7 +30,7 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
|
|
||||||
public class HomesCommand {
|
public class HomesCommand {
|
||||||
private static final ResourceLocation HOMES_GUI_ID = new ResourceLocation("ariasmods", "homes-gui");
|
private static final ChestGUIIdentifier HOMES_GUI_ID = new ChestGUIIdentifier("homes-gui");
|
||||||
|
|
||||||
public static void register(CommandDispatcher<CommandSourceStack> dispatcher)
|
public static void register(CommandDispatcher<CommandSourceStack> dispatcher)
|
||||||
{
|
{
|
||||||
|
@ -54,7 +55,11 @@ public class HomesCommand {
|
||||||
for (Home string : homes.getList()) {
|
for (Home string : homes.getList()) {
|
||||||
Style st = Style.EMPTY.withFont(Style.DEFAULT_FONT).withHoverEvent(HoverTip.get(ChatHelpers.macroize(Messages.HOME_HOVER_TEXT))).withClickEvent(Clickable.command("/home "+string.homeName));
|
Style st = Style.EMPTY.withFont(Style.DEFAULT_FONT).withHoverEvent(HoverTip.get(ChatHelpers.macroize(Messages.HOME_HOVER_TEXT))).withClickEvent(Clickable.command("/home "+string.homeName));
|
||||||
|
|
||||||
ItemStack stack = new ItemStack(Items.BLUE_BED);
|
ItemStack stack = string.homeIcon.copy();
|
||||||
|
if(stack.is(Items.AIR))
|
||||||
|
{
|
||||||
|
stack = new ItemStack(Items.GRASS_BLOCK, 1);
|
||||||
|
}
|
||||||
stack.setHoverName(Component.literal(string.homeName));
|
stack.setHoverName(Component.literal(string.homeName));
|
||||||
|
|
||||||
ChestGUIButton button = new ChestGUIButton(stack, ()-> {
|
ChestGUIButton button = new ChestGUIButton(stack, ()-> {
|
||||||
|
@ -69,16 +74,20 @@ public class HomesCommand {
|
||||||
.withInfo(new LoreEntry.Builder().text(ChatHelpers.macro("!Dark_Purple!This home is in the dimension [0]", string.destination.Dimension).getString()).bold(true).build());
|
.withInfo(new LoreEntry.Builder().text(ChatHelpers.macro("!Dark_Purple!This home is in the dimension [0]", string.destination.Dimension).getString()).bold(true).build());
|
||||||
|
|
||||||
iconY++;
|
iconY++;
|
||||||
gui.withButton(button);
|
|
||||||
if(iconY>=9)
|
if(iconY>=9)
|
||||||
{
|
{
|
||||||
iconY=0;
|
iconY=0;
|
||||||
iconX++;
|
iconX++;
|
||||||
}
|
}
|
||||||
//ChatHelpers.broadcastTo(player.getUUID(), ChatHelpers.macro(Messages.HOME_FORMAT, string.homeName).setStyle(st), ctx.getSource().getServer());
|
if(homes.count() > 27)
|
||||||
|
ChatHelpers.broadcastTo(player.getUUID(), ChatHelpers.macro(Messages.HOME_FORMAT, string.homeName).setStyle(st), ctx.getSource().getServer());
|
||||||
|
else
|
||||||
|
gui.withButton(button); // Put this in the else case, to prevent a error when exceeding inventory slots
|
||||||
|
|
||||||
}
|
}
|
||||||
gui.open();
|
|
||||||
|
if(homes.count()<=27)
|
||||||
|
gui.open();
|
||||||
}catch(CommandSyntaxException ex)
|
}catch(CommandSyntaxException ex)
|
||||||
{
|
{
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
|
|
|
@ -22,6 +22,7 @@ import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
import net.minecraft.commands.Commands;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.phys.Vec2;
|
import net.minecraft.world.phys.Vec2;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@ public class SetHomeCommand {
|
||||||
|
|
||||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.serverLevel());
|
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.serverLevel());
|
||||||
|
|
||||||
Home newhome = new Home(p, homeName, dest);
|
Home newhome = new Home(p, homeName, dest, new ItemStack(p.getBlockStateOn().getBlock().asItem()));
|
||||||
AriasEssentials.player_homes.get(p.getUUID()).add(newhome);
|
AriasEssentials.player_homes.get(p.getUUID()).add(newhome);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@ public class TeleportRunnable extends Task
|
||||||
|
|
||||||
Action.PlayerInst.teleportTo(Action.Dimension, Action.Position.x, Action.Position.y, Action.Position.z, Action.Rotation.y, Action.Rotation.x);
|
Action.PlayerInst.teleportTo(Action.Dimension, Action.Position.x, Action.Position.y, Action.Position.z, Action.Rotation.y, Action.Rotation.x);
|
||||||
|
|
||||||
|
Action.PlayerInst.onUpdateAbilities();
|
||||||
|
|
||||||
DelayedExecutorService.getInstance().schedule(new Task("tp_action",true){
|
DelayedExecutorService.getInstance().schedule(new Task("tp_action",true){
|
||||||
public TeleportContainer container=Action;
|
public TeleportContainer container=Action;
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,6 +20,7 @@ import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
import net.minecraft.commands.Commands;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.phys.Vec2;
|
import net.minecraft.world.phys.Vec2;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
@ -44,7 +45,7 @@ public class RTPWarpCommand {
|
||||||
Vec2 rot = p.getRotationVector();
|
Vec2 rot = p.getRotationVector();
|
||||||
|
|
||||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.serverLevel());
|
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.serverLevel());
|
||||||
Warp warp = new Warp(p.getUUID(), string, true, true, dest);
|
Warp warp = new Warp(p.getUUID(), string, true, true, dest, new ItemStack(p.getBlockStateOn().getBlock().asItem()));
|
||||||
WarpCreatedEvent event = new WarpCreatedEvent(warp);
|
WarpCreatedEvent event = new WarpCreatedEvent(warp);
|
||||||
if(MinecraftForge.EVENT_BUS.post(event))
|
if(MinecraftForge.EVENT_BUS.post(event))
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,7 @@ import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
import net.minecraft.commands.Commands;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.phys.Vec2;
|
import net.minecraft.world.phys.Vec2;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
@ -45,7 +46,7 @@ public class SetWarpCommand {
|
||||||
Vec2 rot = p.getRotationVector();
|
Vec2 rot = p.getRotationVector();
|
||||||
|
|
||||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.serverLevel());
|
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.serverLevel());
|
||||||
Warp w = new Warp(p.getUUID(), string, false, true, dest);
|
Warp w = new Warp(p.getUUID(), string, false, true, dest, new ItemStack(p.getBlockStateOn().getBlock().asItem()));
|
||||||
WarpCreatedEvent event = new WarpCreatedEvent(w);
|
WarpCreatedEvent event = new WarpCreatedEvent(w);
|
||||||
if(MinecraftForge.EVENT_BUS.post(event)){
|
if(MinecraftForge.EVENT_BUS.post(event)){
|
||||||
ChatHelpers.broadcastTo(p.getUUID(), ChatHelpers.macro(Messages.WARP_CREATE_ERROR, event.denyReason), p.server);
|
ChatHelpers.broadcastTo(p.getUUID(), ChatHelpers.macro(Messages.WARP_CREATE_ERROR, event.denyReason), p.server);
|
||||||
|
|
|
@ -22,6 +22,7 @@ import dev.zontreck.libzontreck.chat.Clickable;
|
||||||
import dev.zontreck.libzontreck.chat.HoverTip;
|
import dev.zontreck.libzontreck.chat.HoverTip;
|
||||||
import dev.zontreck.libzontreck.chestgui.ChestGUI;
|
import dev.zontreck.libzontreck.chestgui.ChestGUI;
|
||||||
import dev.zontreck.libzontreck.chestgui.ChestGUIButton;
|
import dev.zontreck.libzontreck.chestgui.ChestGUIButton;
|
||||||
|
import dev.zontreck.libzontreck.chestgui.ChestGUIIdentifier;
|
||||||
import dev.zontreck.libzontreck.lore.LoreEntry;
|
import dev.zontreck.libzontreck.lore.LoreEntry;
|
||||||
import dev.zontreck.libzontreck.profiles.Profile;
|
import dev.zontreck.libzontreck.profiles.Profile;
|
||||||
import dev.zontreck.libzontreck.profiles.UserProfileNotYetExistsException;
|
import dev.zontreck.libzontreck.profiles.UserProfileNotYetExistsException;
|
||||||
|
@ -39,7 +40,7 @@ import net.minecraft.server.level.ServerPlayer;
|
||||||
import org.spongepowered.asm.mixin.Mutable;
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
|
|
||||||
public class WarpsCommand {
|
public class WarpsCommand {
|
||||||
private static final ResourceLocation WARPS_GUI_ID = new ResourceLocation("ariasmods", "ess_warps");
|
private static final ChestGUIIdentifier WARPS_GUI_ID = new ChestGUIIdentifier("ess_warps");
|
||||||
public static void register(CommandDispatcher<CommandSourceStack> dispatcher)
|
public static void register(CommandDispatcher<CommandSourceStack> dispatcher)
|
||||||
{
|
{
|
||||||
dispatcher.register(Commands.literal("warps").executes(c-> warps(c.getSource())));
|
dispatcher.register(Commands.literal("warps").executes(c-> warps(c.getSource())));
|
||||||
|
@ -89,6 +90,30 @@ public class WarpsCommand {
|
||||||
String appendType = (warpType == 0) ? Messages.WARP_STANDARD : Messages.WARP_RTP;
|
String appendType = (warpType == 0) ? Messages.WARP_STANDARD : Messages.WARP_RTP;
|
||||||
|
|
||||||
|
|
||||||
|
HoverEvent hover = HoverTip.get(ChatHelpers.macroize(appendType, warp.destination.Dimension));
|
||||||
|
ClickEvent click = Clickable.command("/warp "+warpName);
|
||||||
|
|
||||||
|
MutableComponent warpMsg = ChatHelpers.macro(ChatColor.GREEN + warpName + ChatColor.resetChat());
|
||||||
|
|
||||||
|
warpMsg = ChatHelpers.applyHoverEvent(warpMsg, hover);
|
||||||
|
// Now, display the warp name, along with the warp's owner information
|
||||||
|
HoverEvent h2 = HoverTip.get(
|
||||||
|
ChatHelpers.macroize(Messages.WARP_HOVER_FORMAT,
|
||||||
|
ChatHelpers.macroize(Messages.WARP_OWNER, prof.name_color, prof.nickname),
|
||||||
|
ChatHelpers.macroize(Messages.WARP_ACCESS_FORMAT,
|
||||||
|
(warp.isPublic ? ChatHelpers.macroize(Messages.PUBLIC) : ChatHelpers.macroize(Messages.PRIVATE))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
);
|
||||||
|
Component ownerInfo = ChatHelpers.applyHoverEvent(ChatHelpers.macro(Messages.HOVER_WARP_INFO), h2);
|
||||||
|
|
||||||
|
|
||||||
|
// Combine the two
|
||||||
|
warpMsg = warpMsg.copy().append(ownerInfo);
|
||||||
|
warpMsg = ChatHelpers.applyClickEvent(warpMsg, click);
|
||||||
|
|
||||||
|
|
||||||
ChestGUIButton button = new ChestGUIButton(HeadUtilities.get(prof.username, warpName), ()->{
|
ChestGUIButton button = new ChestGUIButton(HeadUtilities.get(prof.username, warpName), ()->{
|
||||||
TeleportDestination dest = warp.destination;
|
TeleportDestination dest = warp.destination;
|
||||||
if(warpType == 1)
|
if(warpType == 1)
|
||||||
|
@ -114,7 +139,13 @@ public class WarpsCommand {
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
.withInfo(new LoreEntry.Builder().text(ChatHelpers.macro(appendType, warp.destination.Dimension).getString()).build());
|
.withInfo(new LoreEntry.Builder().text(ChatHelpers.macro(appendType, warp.destination.Dimension).getString()).build());
|
||||||
chestGui.withButton(button);
|
|
||||||
|
if(warps.size() > 27)
|
||||||
|
{
|
||||||
|
// Say to person
|
||||||
|
ChatHelpers.broadcastTo(p, warpMsg, p.server);
|
||||||
|
}else
|
||||||
|
chestGui.withButton(button);
|
||||||
|
|
||||||
iconY++;
|
iconY++;
|
||||||
if(iconY>=9){
|
if(iconY>=9){
|
||||||
|
@ -124,7 +155,8 @@ public class WarpsCommand {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
chestGui.open();
|
if(warps.size() < 27)
|
||||||
|
chestGui.open();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ public class AEServerConfig {
|
||||||
public static final ForgeConfigSpec.ConfigValue<Integer> COST_TO_MAKE_WARP;
|
public static final ForgeConfigSpec.ConfigValue<Integer> COST_TO_MAKE_WARP;
|
||||||
|
|
||||||
public static final ForgeConfigSpec.ConfigValue<Integer> MAX_HOMES;
|
public static final ForgeConfigSpec.ConfigValue<Integer> MAX_HOMES;
|
||||||
|
public static final ForgeConfigSpec.ConfigValue<Integer> MAX_WARPS;
|
||||||
|
|
||||||
public static final ForgeConfigSpec.ConfigValue<List<String>> DIMENSION_BLACKLIST;
|
public static final ForgeConfigSpec.ConfigValue<List<String>> DIMENSION_BLACKLIST;
|
||||||
public static final ForgeConfigSpec.ConfigValue<String> BLACKLISTED_DIMENSION_ERROR;
|
public static final ForgeConfigSpec.ConfigValue<String> BLACKLISTED_DIMENSION_ERROR;
|
||||||
|
|
||||||
|
@ -44,7 +46,8 @@ public class AEServerConfig {
|
||||||
BUILDER.pop();
|
BUILDER.pop();
|
||||||
BUILDER.push("permissions").comment("This section defines permissions, such as total number of homes, and who can make warps");
|
BUILDER.push("permissions").comment("This section defines permissions, such as total number of homes, and who can make warps");
|
||||||
|
|
||||||
MAX_HOMES = BUILDER.comment("Maximum number of homes that are allowed per player (-1 disables the limit entirely)").define("max_homes", -1);
|
MAX_HOMES = BUILDER.comment("Maximum number of homes that are allowed per player (-1 disables the limit entirely). 27 is the current default as that is the max that can fit in the current /homes gui").define("max_homes", 27);
|
||||||
|
MAX_WARPS = BUILDER.comment("Maximum number of warps that are allowed to exist. Default is 27, the max number that can fit in the /warps gui").define("max_warps", 27);
|
||||||
|
|
||||||
BUILDER.pop();
|
BUILDER.pop();
|
||||||
BUILDER.push("teleport");
|
BUILDER.push("teleport");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package dev.zontreck.essentials.homes;
|
package dev.zontreck.essentials.exceptions;
|
||||||
|
|
||||||
public class NoSuchHomeException extends Exception{
|
public class NoSuchHomeException extends Exception{
|
||||||
|
|
|
@ -6,18 +6,23 @@ import dev.zontreck.essentials.commands.teleport.TeleportDestination;
|
||||||
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.Items;
|
||||||
|
|
||||||
public class Home {
|
public class Home {
|
||||||
public UUID owner;
|
public UUID owner;
|
||||||
public String homeName;
|
public String homeName;
|
||||||
public TeleportDestination destination;
|
public TeleportDestination destination;
|
||||||
|
public ItemStack homeIcon;
|
||||||
|
|
||||||
|
|
||||||
public Home(ServerPlayer player, String name, TeleportDestination dest)
|
public Home(ServerPlayer player, String name, TeleportDestination dest, ItemStack homeIcon)
|
||||||
{
|
{
|
||||||
owner=player.getUUID();
|
owner=player.getUUID();
|
||||||
homeName=name;
|
homeName=name;
|
||||||
destination=dest;
|
destination=dest;
|
||||||
|
this.homeIcon = homeIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Home(CompoundTag tag)
|
public Home(CompoundTag tag)
|
||||||
|
@ -29,6 +34,10 @@ public class Home {
|
||||||
} catch (InvalidDeserialization e) {
|
} catch (InvalidDeserialization e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
if(tag.contains("icon"))
|
||||||
|
{
|
||||||
|
homeIcon = ItemStack.of(tag.getCompound("icon"));
|
||||||
|
} else homeIcon = new ItemStack(Items.BLUE_BED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompoundTag serialize()
|
public CompoundTag serialize()
|
||||||
|
@ -37,6 +46,7 @@ public class Home {
|
||||||
tag.putUUID("owner", owner);
|
tag.putUUID("owner", owner);
|
||||||
tag.putString("name", homeName);
|
tag.putString("name", homeName);
|
||||||
tag.put("dest", destination.serialize());
|
tag.put("dest", destination.serialize());
|
||||||
|
tag.put("icon", homeIcon.serializeNBT());
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import dev.zontreck.essentials.events.HomeCreatedEvent;
|
import dev.zontreck.essentials.events.HomeCreatedEvent;
|
||||||
import dev.zontreck.essentials.events.HomeDeletedEvent;
|
import dev.zontreck.essentials.events.HomeDeletedEvent;
|
||||||
|
import dev.zontreck.essentials.exceptions.NoSuchHomeException;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.ListTag;
|
import net.minecraft.nbt.ListTag;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package dev.zontreck.essentials.networking;
|
package dev.zontreck.essentials.networking;
|
||||||
|
|
||||||
import dev.zontreck.essentials.AriasEssentials;
|
import dev.zontreck.essentials.AriasEssentials;
|
||||||
|
import dev.zontreck.essentials.networking.packets.s2c.S2CUpdateHearts;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraftforge.network.NetworkDirection;
|
import net.minecraftforge.network.NetworkDirection;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package dev.zontreck.essentials.networking;
|
package dev.zontreck.essentials.networking.packets.s2c;
|
||||||
|
|
||||||
import dev.zontreck.essentials.configs.AEClientConfig;
|
import dev.zontreck.essentials.configs.AEClientConfig;
|
||||||
import dev.zontreck.libzontreck.networking.packets.IPacket;
|
import dev.zontreck.libzontreck.networking.packets.IPacket;
|
||||||
|
@ -36,6 +36,7 @@ public class S2CUpdateHearts
|
||||||
|
|
||||||
ctx.enqueueWork(()->{
|
ctx.enqueueWork(()->{
|
||||||
AEClientConfig.ENABLE_HEARTS_RENDER.set(current);
|
AEClientConfig.ENABLE_HEARTS_RENDER.set(current);
|
||||||
|
AEClientConfig.ENABLE_HEARTS_RENDER.save();
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
|
@ -52,7 +52,7 @@ public class RTP
|
||||||
public WorldPosition position;
|
public WorldPosition position;
|
||||||
private List<Block> BLACKLIST = Lists.of(Blocks.LAVA, Blocks.WATER, Blocks.BEDROCK);
|
private List<Block> BLACKLIST = Lists.of(Blocks.LAVA, Blocks.WATER, Blocks.BEDROCK);
|
||||||
protected int tries;
|
protected int tries;
|
||||||
protected int lastThreadDelay = 1;
|
protected int lastThreadDelay = 15;
|
||||||
|
|
||||||
protected RTP withThreadDelay(int delay)
|
protected RTP withThreadDelay(int delay)
|
||||||
{
|
{
|
||||||
|
@ -136,53 +136,62 @@ public class RTP
|
||||||
moveUp();
|
moveUp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void newPosition() {
|
public void newPosition() {
|
||||||
if(!AriasEssentials.ALIVE)return;
|
if (!AriasEssentials.ALIVE || tries >= 25) return;
|
||||||
containingThread=Thread.currentThread();
|
|
||||||
if(tries>=30)return;
|
containingThread = Thread.currentThread();
|
||||||
AriasEssentials.LOGGER.info("RTP starts looking for new position");
|
AriasEssentials.LOGGER.info("RTP starts looking for new position");
|
||||||
|
|
||||||
Random rng = new Random(Instant.now().getEpochSecond());
|
Random rng = new Random(Instant.now().getEpochSecond());
|
||||||
Vector3 pos = new Vector3(rng.nextDouble(0xFFFF), 0, rng.nextDouble(0xFFFF));
|
|
||||||
BlockPos bpos = pos.asBlockPos();
|
Vector3 pos;
|
||||||
position.getActualDimension().getChunk(bpos.getX() >> 4, bpos.getZ() >> 4, ChunkStatus.SPAWN);
|
BlockPos bpos;
|
||||||
pos = new Vector3(
|
|
||||||
position.getActualDimension().getHeightmapPos(heightMapType, pos.asBlockPos()));
|
do {
|
||||||
while (!position.getActualDimension().getWorldBorder().isWithinBounds(pos.asBlockPos())) {
|
pos = new Vector3(rng.nextDouble(0xFFFF), 150, rng.nextDouble(0xFFFF));
|
||||||
pos = new Vector3(rng.nextDouble(0xffff), 0, rng.nextDouble(0xffff));
|
|
||||||
|
pos = spiralPositions(pos);
|
||||||
|
position.Position = pos;
|
||||||
bpos = pos.asBlockPos();
|
bpos = pos.asBlockPos();
|
||||||
position.getActualDimension().getChunk(bpos.getX() >> 4, bpos.getZ() >> 4, ChunkStatus.SPAWN);
|
} while (!isValidPosition(bpos));
|
||||||
pos = new Vector3(
|
|
||||||
position.getActualDimension().getHeightmapPos(heightMapType, pos.asBlockPos()));
|
|
||||||
}
|
|
||||||
|
|
||||||
position.Position = pos;
|
|
||||||
|
|
||||||
if (pos.y < -60) {
|
if (pos.y < -30 || pos.y >= position.getActualDimension().getLogicalHeight()) {
|
||||||
newPosition();
|
newPosition();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos.y >= position.getActualDimension().getLogicalHeight()) {
|
|
||||||
spiralPositions(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
tries++;
|
tries++;
|
||||||
AriasEssentials.LOGGER.info("RTP returns new position");
|
AriasEssentials.LOGGER.info("RTP returns new position");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void spiralPositions(Vector3 position)
|
private boolean isValidPosition(BlockPos bpos) {
|
||||||
{
|
ServerLevel dimension = position.getActualDimension();
|
||||||
|
ChunkStatus status = ChunkStatus.SPAWN;
|
||||||
|
|
||||||
|
dimension.getChunk(bpos.getX() >> 4, bpos.getZ() >> 4, status);
|
||||||
|
|
||||||
|
Vector3 pos = new Vector3(dimension.getHeightmapPos(heightMapType, bpos));
|
||||||
|
return dimension.getWorldBorder().isWithinBounds(pos.asBlockPos());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Vector3 spiralPositions(Vector3 position) {
|
||||||
Vec3i posi = position.asMinecraftVec3i();
|
Vec3i posi = position.asMinecraftVec3i();
|
||||||
for(BlockPos pos : BlockPos.spiralAround(new BlockPos(posi.getX(), this.position.getActualDimension().getSeaLevel(), posi.getZ()), 16, Direction.WEST, Direction.NORTH)){
|
ServerLevel dimension = this.position.getActualDimension();
|
||||||
if(isSafe(pos)){
|
BlockPos startBlockPos = new BlockPos(posi.getX(), dimension.getSeaLevel(), posi.getZ());
|
||||||
|
|
||||||
|
for (BlockPos pos : BlockPos.spiralAround(startBlockPos, 16, Direction.WEST, Direction.NORTH)) {
|
||||||
|
if (isSafe(pos)) {
|
||||||
// Set the new position
|
// Set the new position
|
||||||
this.position.Position = new Vector3(pos);
|
return new Vector3(pos);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean safe(BlockPos blockPos)
|
private boolean safe(BlockPos blockPos)
|
||||||
{
|
{
|
||||||
containingThread=Thread.currentThread();
|
containingThread=Thread.currentThread();
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package dev.zontreck.essentials.rtp;
|
package dev.zontreck.essentials.rtp;
|
||||||
|
|
||||||
|
import dev.zontreck.essentials.AriasEssentials;
|
||||||
import dev.zontreck.essentials.Messages;
|
import dev.zontreck.essentials.Messages;
|
||||||
import dev.zontreck.essentials.commands.teleport.TeleportActioner;
|
import dev.zontreck.essentials.commands.teleport.TeleportActioner;
|
||||||
import dev.zontreck.essentials.events.RTPFoundEvent;
|
import dev.zontreck.essentials.events.RTPFoundEvent;
|
||||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
|
||||||
|
@ -15,8 +17,9 @@ public class RTPCachesEventHandlers
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onTick(TickEvent.ServerTickEvent event)
|
public void onTick(TickEvent.ServerTickEvent event)
|
||||||
{
|
{
|
||||||
|
if(!AriasEssentials.ALIVE) return;
|
||||||
lastTick++;
|
lastTick++;
|
||||||
if(lastTick>=40)
|
if(lastTick>=400)
|
||||||
{
|
{
|
||||||
lastTick=0;
|
lastTick=0;
|
||||||
|
|
||||||
|
@ -24,16 +27,25 @@ public class RTPCachesEventHandlers
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
MinecraftForge.EVENT_BUS.unregister(this);
|
||||||
|
|
||||||
firstRun=false;
|
firstRun=false;
|
||||||
|
AriasEssentials.LOGGER.info("Aria's Essentials startup is running. Scanning for initial RTP locations");
|
||||||
for(ServerLevel level : event.getServer().getAllLevels())
|
for(ServerLevel level : event.getServer().getAllLevels())
|
||||||
{
|
{
|
||||||
|
if(AriasEssentials.DEBUG)
|
||||||
|
{
|
||||||
|
AriasEssentials.LOGGER.info("Scanning a level");
|
||||||
|
}
|
||||||
if(TeleportActioner.isBlacklistedDimension(level))
|
if(TeleportActioner.isBlacklistedDimension(level))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
RandomPositionFactory.beginRTPSearch(level); // Populate 10 RTP points
|
RandomPositionFactory.beginRTPSearch(level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AriasEssentials.LOGGER.info("Startup done. RTP searching will continue in a separate thread");
|
||||||
}catch (Exception e)
|
}catch (Exception e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -43,7 +55,7 @@ public class RTPCachesEventHandlers
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRTPFound(RTPFoundEvent event)
|
public static void onRTPFound(final RTPFoundEvent event)
|
||||||
{
|
{
|
||||||
RTPCaches.Locations.add(event.rtp);
|
RTPCaches.Locations.add(event.rtp);
|
||||||
ChatHelpers.broadcast(ChatHelpers.macro(Messages.RTP_CACHED, event.rtp.position.Dimension), event.rtp.position.getActualDimension().getServer());
|
ChatHelpers.broadcast(ChatHelpers.macro(Messages.RTP_CACHED, event.rtp.position.Dimension), event.rtp.position.getActualDimension().getServer());
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
package dev.zontreck.essentials.rtp;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import dev.zontreck.essentials.AriasEssentials;
|
|
||||||
import dev.zontreck.essentials.commands.teleport.TeleportContainer;
|
|
||||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.core.BlockPos.MutableBlockPos;
|
|
||||||
import net.minecraft.core.Vec3i;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
|
||||||
import net.minecraft.world.level.levelgen.Heightmap.Types;
|
|
||||||
import net.minecraft.world.phys.AABB;
|
|
||||||
import net.minecraft.world.phys.Vec2;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
/**
|
|
||||||
* @see RTP instead
|
|
||||||
*/
|
|
||||||
public class RTPContainer {
|
|
||||||
}
|
|
|
@ -8,73 +8,44 @@ import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.level.ChunkPos;
|
import net.minecraft.world.level.ChunkPos;
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class aims to serve as the Random Position Locate system
|
* This class serves as the Random Position Locate system, aiming to be non-thread blocking for improved server performance.
|
||||||
* It aims to be as non-thread blocking as possible to avoid server lag
|
* To utilize, initialize an RTP from the RandomPositionFactory and execute from there.
|
||||||
*
|
|
||||||
* To utilize, initialize a RTPContainer from the RandomPositionFactory and execute from there.
|
|
||||||
*/
|
*/
|
||||||
public class RandomPositionLocator extends Task
|
public class RandomPositionLocator extends Task {
|
||||||
{
|
private static final Logger log = LogManager.getLogger("RPL-"+Thread.currentThread().getName());
|
||||||
private final RTP contain;
|
private final RTP contain;
|
||||||
|
|
||||||
public RandomPositionLocator(RTP rtp)
|
/**
|
||||||
{
|
* Constructs a RandomPositionLocator with the specified RTP instance.
|
||||||
super("RPL",true);
|
*
|
||||||
contain=rtp;
|
* @param rtp The RTP instance to use.
|
||||||
|
*/
|
||||||
|
public RandomPositionLocator(RTP rtp) {
|
||||||
|
super("RPL", true);
|
||||||
|
contain = rtp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if(!AriasEssentials.ALIVE)return;
|
if (!AriasEssentials.ALIVE) return;
|
||||||
|
|
||||||
//ChatHelpers.broadcastTo(contain.container.PlayerInst.getUUID(), ChatHelpers.macro(Messages.RTP_SEARCHING, String.valueOf(contain.tries), "30"), contain.container.PlayerInst.server);
|
|
||||||
|
|
||||||
ServerLevel levl = contain.position.getActualDimension();
|
if (AriasEssentials.DEBUG) {
|
||||||
ChunkAccess chunk = levl.getChunk(contain.position.Position.asBlockPos());
|
log.debug("RTP Search thread");
|
||||||
ChunkPos cpos = chunk.getPos();
|
|
||||||
boolean needsLoading = false;
|
|
||||||
needsLoading = !(levl.getForcedChunks().contains(cpos.toLong()));
|
|
||||||
|
|
||||||
|
|
||||||
if(needsLoading)
|
|
||||||
levl.setChunkForced(cpos.x, cpos.z, true);
|
|
||||||
|
|
||||||
int curChecks=0;
|
|
||||||
while(curChecks<3)
|
|
||||||
{
|
|
||||||
if(contain.isSafe(contain.position.Position.asBlockPos()))
|
|
||||||
{
|
|
||||||
if(needsLoading)
|
|
||||||
levl.setChunkForced(cpos.x, cpos.z, false);
|
|
||||||
|
|
||||||
MinecraftForge.EVENT_BUS.post(new RTPFoundEvent(contain));
|
|
||||||
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
curChecks++;
|
|
||||||
contain.move();
|
|
||||||
//AriasEssentials.LOGGER.info("[DEBUG] "+ChatColor.doColors("!Dark_Red!Checking position: "+contain.container.world_pos.Position.toString()+"; "+contain.container.Dimension.getBlockState(contain.container.world_pos.Position.asBlockPos()).getBlock().toString()+"; "+contain.container.Dimension.getBlockState(contain.container.world_pos.Position.asBlockPos().below()).getBlock().toString()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(needsLoading)
|
|
||||||
levl.setChunkForced(cpos.x, cpos.z, false);
|
|
||||||
|
|
||||||
contain.newPosition();
|
contain.newPosition();
|
||||||
|
|
||||||
if(contain.tries > 30)
|
if(AriasEssentials.DEBUG)
|
||||||
{
|
{
|
||||||
// Abort
|
log.debug("Dispatching RTPFoundEvent - " + contain.position.Dimension);
|
||||||
return;
|
|
||||||
}else {
|
|
||||||
// Schedule the task to execute
|
|
||||||
//run();
|
|
||||||
|
|
||||||
RandomPositionLocator next = new RandomPositionLocator(contain.withThreadDelay(contain.lastThreadDelay+1));
|
|
||||||
DelayedExecutorService.getInstance().schedule(next, contain.lastThreadDelay+1);
|
|
||||||
AriasEssentials.LOGGER.info("Giving up current RTP search. Scheduling another search in 1 second");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
contain.position.getActualDimension().getServer().execute(()->{
|
||||||
|
MinecraftForge.EVENT_BUS.post(new RTPFoundEvent(contain));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,18 @@ import dev.zontreck.essentials.commands.teleport.TeleportDestination;
|
||||||
import dev.zontreck.essentials.events.WarpAccessControlListUpdatedEvent;
|
import dev.zontreck.essentials.events.WarpAccessControlListUpdatedEvent;
|
||||||
import dev.zontreck.essentials.warps.AccessControlList.ACLEntry;
|
import dev.zontreck.essentials.warps.AccessControlList.ACLEntry;
|
||||||
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
||||||
|
import dev.zontreck.libzontreck.profiles.Profile;
|
||||||
|
import dev.zontreck.libzontreck.profiles.UserProfileNotYetExistsException;
|
||||||
|
import dev.zontreck.libzontreck.util.ServerUtilities;
|
||||||
|
import dev.zontreck.libzontreck.util.heads.HeadUtilities;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.IntArrayTag;
|
import net.minecraft.nbt.IntArrayTag;
|
||||||
import net.minecraft.nbt.ListTag;
|
import net.minecraft.nbt.ListTag;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
import net.minecraft.nbt.NbtUtils;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
||||||
public class Warp {
|
public class Warp {
|
||||||
|
@ -24,7 +30,9 @@ public class Warp {
|
||||||
public TeleportDestination destination;
|
public TeleportDestination destination;
|
||||||
private AccessControlList ACL;
|
private AccessControlList ACL;
|
||||||
|
|
||||||
public Warp(UUID owner, String name, boolean rtp, boolean publicWarp, TeleportDestination destination)
|
public ItemStack warpIcon;
|
||||||
|
|
||||||
|
public Warp(UUID owner, String name, boolean rtp, boolean publicWarp, TeleportDestination destination, ItemStack warpIcon)
|
||||||
{
|
{
|
||||||
this.owner=owner;
|
this.owner=owner;
|
||||||
WarpName=name;
|
WarpName=name;
|
||||||
|
@ -32,11 +40,23 @@ public class Warp {
|
||||||
isPublic=publicWarp;
|
isPublic=publicWarp;
|
||||||
this.destination=destination;
|
this.destination=destination;
|
||||||
this.ACL = new AccessControlList();
|
this.ACL = new AccessControlList();
|
||||||
|
|
||||||
|
if(warpIcon==null)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
Profile prof = Profile.get_profile_of(owner.toString());
|
||||||
|
this.warpIcon = HeadUtilities.get(prof.username, name);
|
||||||
|
|
||||||
|
} catch (UserProfileNotYetExistsException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else this.warpIcon=warpIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Warp deserialize(CompoundTag tag) throws InvalidDeserialization
|
public static Warp deserialize(CompoundTag tag) throws InvalidDeserialization
|
||||||
{
|
{
|
||||||
Warp warp = new Warp(tag.getUUID("owner"), tag.getString("name"), tag.getBoolean("rtp"), tag.getBoolean("public"), new TeleportDestination(tag.getCompound("destination")));
|
Warp warp = new Warp(tag.getUUID("owner"), tag.getString("name"), tag.getBoolean("rtp"), tag.getBoolean("public"), new TeleportDestination(tag.getCompound("destination")), ItemStack.of(tag.getCompound("icon")));
|
||||||
|
|
||||||
if(!warp.isPublic)
|
if(!warp.isPublic)
|
||||||
{
|
{
|
||||||
|
@ -54,6 +74,7 @@ public class Warp {
|
||||||
tag.putBoolean("rtp", RTP);
|
tag.putBoolean("rtp", RTP);
|
||||||
tag.putBoolean("public", isPublic);
|
tag.putBoolean("public", isPublic);
|
||||||
tag.put("destination", destination.serialize());
|
tag.put("destination", destination.serialize());
|
||||||
|
tag.put("icon", warpIcon.serializeNBT());
|
||||||
if(!isPublic)
|
if(!isPublic)
|
||||||
{
|
{
|
||||||
tag.put("acl", ACL.serialize());
|
tag.put("acl", ACL.serialize());
|
||||||
|
|
Loading…
Reference in a new issue