Push optimizations
* Attempt to fix vault screen text offsets * Begin implementation of creeper heal ** Legacy implementation of ZSchem3 will be added, along with modded implementation * Known: Will not build due to in-progress changes
This commit is contained in:
parent
04c558f2fc
commit
325a6ed11f
15 changed files with 261 additions and 68 deletions
|
@ -3,7 +3,7 @@
|
|||
org.gradle.jvmargs=-Xmx8G
|
||||
org.gradle.daemon=false
|
||||
|
||||
my_version=1.3.4.1
|
||||
my_version=1.3.4.2
|
||||
|
||||
mc_version=1.19.2
|
||||
forge_version=43.1.32
|
||||
|
|
58
src/main/java/dev/zontreck/otemod/antigrief/Handler.java
Normal file
58
src/main/java/dev/zontreck/otemod/antigrief/Handler.java
Normal file
|
@ -0,0 +1,58 @@
|
|||
package dev.zontreck.otemod.antigrief;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.event.level.ChunkDataEvent;
|
||||
import net.minecraftforge.event.level.ExplosionEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
|
||||
public class Handler
|
||||
{
|
||||
private static final String EXPLOSION_HEAL_TAG = "OTEEH";
|
||||
|
||||
|
||||
@OnlyIn(Dist.DEDICATED_SERVER)
|
||||
@SubscribeEvent
|
||||
public void onChunkLoad(final ChunkDataEvent.Load event)
|
||||
{
|
||||
final CompoundTag EHTag = event.getData().getCompound(EXPLOSION_HEAL_TAG);
|
||||
if(!EHTag.isEmpty())
|
||||
{
|
||||
final CompoundTag healer = EHTag.getCompound("healer");
|
||||
if(!healer.isEmpty()){
|
||||
// This would re-queue the healer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.DEDICATED_SERVER)
|
||||
@SubscribeEvent
|
||||
public void onDetonation(ExplosionEvent.Detonate event)
|
||||
{
|
||||
ServerLevel level = (ServerLevel)event.getLevel();
|
||||
|
||||
Entity exploder = event.getExplosion().getExploder();
|
||||
|
||||
if(exploder==null)return ; // TODO: Make this check config
|
||||
|
||||
final Collection<BlockState> affectedBlocks = buildBlocks(level, event.getAffectedBlocks());
|
||||
}
|
||||
|
||||
private Collection<BlockState> buildBlocks(ServerLevel level, Collection<BlockPos> positions)
|
||||
{
|
||||
for(final BlockPos pos : positions)
|
||||
{
|
||||
final BlockState state = level.getBlockState(pos);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
65
src/main/java/dev/zontreck/otemod/antigrief/StoredBlock.java
Normal file
65
src/main/java/dev/zontreck/otemod/antigrief/StoredBlock.java
Normal file
|
@ -0,0 +1,65 @@
|
|||
package dev.zontreck.otemod.antigrief;
|
||||
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.commands.teleport.TeleportContainer;
|
||||
import dev.zontreck.otemod.containers.Vector3;
|
||||
import dev.zontreck.otemod.containers.WorldPosition;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.tags.TagBuilder;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.chunk.storage.ChunkSerializer;
|
||||
|
||||
public class StoredBlock {
|
||||
public CompoundTag blockData;
|
||||
|
||||
private WorldPosition position;
|
||||
private BlockState state;
|
||||
|
||||
public StoredBlock(final BlockPos pos, final BlockState toSave, final ServerLevel lvl)
|
||||
{
|
||||
position = new WorldPosition(new Vector3(pos), lvl);
|
||||
|
||||
this.state=toSave;
|
||||
}
|
||||
|
||||
public StoredBlock(final CompoundTag tag)
|
||||
{
|
||||
this.deserialize(tag);
|
||||
}
|
||||
|
||||
|
||||
public final BlockPos getPos()
|
||||
{
|
||||
return pos;
|
||||
}
|
||||
|
||||
public final BlockState getState()
|
||||
{
|
||||
return state;
|
||||
}
|
||||
|
||||
public final int getChunkX()
|
||||
{
|
||||
return pos.getX() >> 4;
|
||||
}
|
||||
|
||||
public final int getChunkZ()
|
||||
{
|
||||
return pos.getZ() >> 4;
|
||||
}
|
||||
|
||||
|
||||
public CompoundTag serialize()
|
||||
{
|
||||
final CompoundTag tag = new CompoundTag();
|
||||
|
||||
|
||||
tag.put("pos", )
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package dev.zontreck.otemod.commands.antigrief;
|
||||
|
||||
// This will accelerate the healing queue, not do it instantly!
|
||||
// The queue will get processed at a rate of 10* the configured rate.
|
||||
public class HealNow
|
||||
{
|
||||
|
||||
}
|
|
@ -86,28 +86,7 @@ public class HomeCommand {
|
|||
position = dest.Position.asMinecraftVector();
|
||||
rot = dest.Rotation.asMinecraftVector();
|
||||
|
||||
String dim = dest.Dimension;
|
||||
String[] dims = dim.split(":");
|
||||
|
||||
ResourceLocation rl = new ResourceLocation(dims[0], dims[1]);
|
||||
|
||||
ServerLevel dimL = null;
|
||||
for (ServerLevel lServerLevel : p.server.getAllLevels()) {
|
||||
ResourceLocation XL = lServerLevel.dimension().location();
|
||||
|
||||
if(XL.getNamespace().equals(rl.getNamespace())){
|
||||
if(XL.getPath().equals(rl.getPath())){
|
||||
dimL = lServerLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(dimL == null)
|
||||
{
|
||||
SQL = "Failed to find the dimension";
|
||||
ctx.sendFailure(Component.literal(ChatColor.DARK_RED+ChatColor.BOLD+"FAILED TO LOCATE THAT DIMENSION. CONTACT THE SERVER ADMIN"));
|
||||
return 1;
|
||||
}
|
||||
ServerLevel dimL = dest.getActualDimension();
|
||||
|
||||
TeleportActioner.ApplyTeleportEffect(p);
|
||||
// Instantiate a Teleport Runner
|
||||
|
|
|
@ -52,7 +52,7 @@ public class SetHomeCommand {
|
|||
Vec3 position = p.position();
|
||||
Vec2 rot = p.getRotationVector();
|
||||
|
||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.getLevel().dimension().location().getNamespace() + ":" + p.getLevel().dimension().location().getPath());
|
||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.getLevel());
|
||||
|
||||
String SQL = "REPLACE INTO `homes` (user, home_name, teleporter) VALUES (?, ?, ?);";
|
||||
PreparedStatement pstat = con.prepareStatement(SQL);
|
||||
|
|
|
@ -49,7 +49,7 @@ public class RTPWarpCommand {
|
|||
Vec3 position = p.position();
|
||||
Vec2 rot = p.getRotationVector();
|
||||
|
||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.getLevel().dimension().location().getNamespace() + ":" + p.getLevel().dimension().location().getPath());
|
||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.getLevel());
|
||||
|
||||
String SQL = "REPLACE INTO `warps` (warpname, owner, warptype, teleporter) values (?, ?, ?, ?);";
|
||||
pstat = con.prepareStatement(SQL);
|
||||
|
|
|
@ -48,7 +48,7 @@ public class SetWarpCommand {
|
|||
Vec3 position = p.position();
|
||||
Vec2 rot = p.getRotationVector();
|
||||
|
||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.getLevel().dimension().location().getNamespace() + ":" + p.getLevel().dimension().location().getPath());
|
||||
TeleportDestination dest = new TeleportDestination(new Vector3(position), new Vector2(rot), p.getLevel());
|
||||
|
||||
String SQL = "REPLACE INTO `warps` (warpname, owner, warptype, teleporter) values (?, ?, ?, ?);";
|
||||
pstat = con.prepareStatement(SQL);
|
||||
|
|
|
@ -59,27 +59,9 @@ public class WarpCommand {
|
|||
{
|
||||
TeleportDestination dest = new TeleportDestination(NbtUtils.snbtToStructure(rs.getString("teleporter")));
|
||||
|
||||
String dim = dest.Dimension;
|
||||
String[] dims = dim.split(":");
|
||||
|
||||
ResourceLocation rl = new ResourceLocation(dims[0], dims[1]);
|
||||
ServerLevel dimL = dest.getActualDimension();
|
||||
|
||||
ServerLevel dimL = null;
|
||||
for (ServerLevel lServerLevel : p.server.getAllLevels()) {
|
||||
ResourceLocation XL = lServerLevel.dimension().location();
|
||||
|
||||
if(XL.getNamespace().equals(rl.getNamespace())){
|
||||
if(XL.getPath().equals(rl.getPath())){
|
||||
dimL = lServerLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(dimL == null)
|
||||
{
|
||||
ChatServerOverride.broadcastTo(source.getPlayer().getUUID(), Component.literal(ChatColor.RED+"DIMENSION COULD NOT BE FOUND"), source.getServer());
|
||||
return 1;
|
||||
}
|
||||
|
||||
final int type = rs.getInt("warptype");
|
||||
final ServerLevel f_dim = dimL;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package dev.zontreck.otemod.containers;
|
||||
|
||||
import dev.zontreck.otemod.exceptions.InvalidDeserialization;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class Vector3
|
||||
|
@ -13,6 +14,11 @@ public class Vector3
|
|||
return new Vec3(x, y, z);
|
||||
}
|
||||
|
||||
public BlockPos asBlockPos()
|
||||
{
|
||||
return new BlockPos(asMinecraftVector());
|
||||
}
|
||||
|
||||
public Vector3()
|
||||
{
|
||||
|
||||
|
@ -32,6 +38,13 @@ public class Vector3
|
|||
z=pos.z;
|
||||
}
|
||||
|
||||
public Vector3(BlockPos pos)
|
||||
{
|
||||
x=pos.getX();
|
||||
y=pos.getY();
|
||||
z=pos.getZ();
|
||||
}
|
||||
|
||||
public Vector3(String pos) throws InvalidDeserialization
|
||||
{
|
||||
// This will be serialized most likely from the ToString method
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
package dev.zontreck.otemod.containers;
|
||||
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.exceptions.InvalidDeserialization;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
|
||||
public class WorldPosition
|
||||
{
|
||||
|
||||
public Vector3 Position;
|
||||
public String Dimension;
|
||||
|
||||
public WorldPosition(CompoundTag tag) throws InvalidDeserialization
|
||||
{
|
||||
Position = new Vector3(tag.getString("Position"));
|
||||
Dimension = tag.getString("Dimension");
|
||||
|
||||
}
|
||||
|
||||
public WorldPosition(Vector3 pos, String dim)
|
||||
{
|
||||
Position=pos;
|
||||
Dimension=dim;
|
||||
}
|
||||
|
||||
public WorldPosition(Vector3 pos, ServerLevel lvl)
|
||||
{
|
||||
Position=pos;
|
||||
Dimension = lvl.dimension().location().getNamespace() + ":"+lvl.dimension().location().getPath();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return NbtUtils.structureToSnbt(serialize());
|
||||
}
|
||||
|
||||
public CompoundTag serialize()
|
||||
{
|
||||
CompoundTag tag = new CompoundTag();
|
||||
|
||||
tag.putString("Position", Position.toString());
|
||||
tag.putString("Dimension", Dimension);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ServerLevel getActualDimension()
|
||||
{
|
||||
|
||||
String dim = Dimension;
|
||||
String[] dims = dim.split(":");
|
||||
|
||||
ResourceLocation rl = new ResourceLocation(dims[0], dims[1]);
|
||||
ServerLevel dimL = null;
|
||||
for (ServerLevel lServerLevel : OTEMod.THE_SERVER.getAllLevels()) {
|
||||
ResourceLocation XL = lServerLevel.dimension().location();
|
||||
|
||||
if(XL.getNamespace().equals(rl.getNamespace())){
|
||||
if(XL.getPath().equals(rl.getPath())){
|
||||
dimL = lServerLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(dimL == null)
|
||||
{
|
||||
OTEMod.LOGGER.error("DIMENSION COULD NOT BE FOUND : "+Dimension);
|
||||
return null;
|
||||
}
|
||||
|
||||
return dimL;
|
||||
}
|
||||
}
|
|
@ -2,41 +2,50 @@ package dev.zontreck.otemod.database;
|
|||
|
||||
import dev.zontreck.otemod.containers.Vector2;
|
||||
import dev.zontreck.otemod.containers.Vector3;
|
||||
import dev.zontreck.otemod.containers.WorldPosition;
|
||||
import dev.zontreck.otemod.exceptions.InvalidDeserialization;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
|
||||
/**
|
||||
* This defines the data structure, and methods for deserializing and serializing teleport destinations, for easier storage in the database
|
||||
**/
|
||||
public class TeleportDestination {
|
||||
public Vector3 Position;
|
||||
public class TeleportDestination extends WorldPosition
|
||||
{
|
||||
public Vector2 Rotation;
|
||||
public String Dimension;
|
||||
|
||||
public TeleportDestination(CompoundTag tag) throws InvalidDeserialization
|
||||
{
|
||||
Position = new Vector3(tag.getString("Position"));
|
||||
super(tag);
|
||||
Rotation = new Vector2(tag.getString("Rotation"));
|
||||
Dimension = tag.getString("Dimension");
|
||||
}
|
||||
public TeleportDestination(Vector3 pos, Vector2 rot, String dim)
|
||||
{
|
||||
Position = pos;
|
||||
super(pos, dim);
|
||||
Rotation = rot;
|
||||
Dimension = dim;
|
||||
}
|
||||
|
||||
public TeleportDestination(Vector3 pos, Vector2 rot, ServerLevel dim)
|
||||
{
|
||||
super(pos,dim);
|
||||
Rotation=rot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
CompoundTag tag = new CompoundTag();
|
||||
tag.putString("Position", Position.toString());
|
||||
tag.putString("Rotation", Rotation.toString());
|
||||
tag.putString("Dimension", Dimension);
|
||||
|
||||
return NbtUtils.structureToSnbt(tag);
|
||||
return NbtUtils.structureToSnbt(serialize());
|
||||
|
||||
}
|
||||
|
||||
public CompoundTag serialize(){
|
||||
|
||||
CompoundTag tag = super.serialize();
|
||||
tag.putString("Rotation", Rotation.toString());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,16 +37,16 @@ public class VaultScreen extends AbstractContainerScreen <VaultMenu>
|
|||
super.render(stack, mouseX, mouseY, partialTicks);
|
||||
this.renderTooltip(stack, mouseX, mouseY);
|
||||
|
||||
//this.font.draw(stack, this.title, this.leftPos + 17, this.topPos + 15, 0xFFFFFF);
|
||||
//this.font.draw(stack, this.playerInventoryTitle, this.leftPos + 17, this.topPos + 123, 0xFFFFFF);
|
||||
this.font.draw(stack, this.title, this.leftPos + 17, this.topPos + 15, 0xFFFFFF);
|
||||
this.font.draw(stack, this.playerInventoryTitle, this.leftPos + 17, this.topPos + 123, 0xFFFFFF);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderLabels(PoseStack stack, int mouseX, int mouseY)
|
||||
{
|
||||
this.font.draw(stack, this.title.getString(), this.leftPos + 17, this.topPos + 15, 0xFFFFFF);
|
||||
//this.font.draw(stack, this.title.getString(), this.leftPos + 17, this.topPos + 15, 0xFFFFFF);
|
||||
|
||||
this.font.draw(stack, this.playerInventoryTitle.getString(), this.leftPos + 17, this.topPos + 123, 0xFFFFFF);
|
||||
//this.font.draw(stack, this.playerInventoryTitle.getString(), this.leftPos + 17, this.topPos + 123, 0xFFFFFF);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,7 +19,7 @@ modId="otemod" #mandatory
|
|||
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
|
||||
# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata
|
||||
# see the associated build.gradle script for how to populate this completely automatically during a build
|
||||
version="1.3.4.1" #mandatory
|
||||
version="1.3.4.2" #mandatory
|
||||
# A display name for the mod
|
||||
displayName="OTEMod Resources" #mandatory
|
||||
# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/
|
||||
|
|
|
@ -275,8 +275,8 @@
|
|||
"when_in_range": {
|
||||
"type": "minecraft:noise",
|
||||
"noise": "minecraft:ore_veininess",
|
||||
"xz_scale": 5,
|
||||
"y_scale": 5
|
||||
"xz_scale": 10,
|
||||
"y_scale": 10
|
||||
},
|
||||
"when_out_of_range": 0
|
||||
}
|
||||
|
@ -298,8 +298,8 @@
|
|||
"when_in_range": {
|
||||
"type": "minecraft:noise",
|
||||
"noise": "minecraft:ore_vein_a",
|
||||
"xz_scale": 8,
|
||||
"y_scale": 8
|
||||
"xz_scale": 16,
|
||||
"y_scale": 16
|
||||
},
|
||||
"when_out_of_range": 0
|
||||
}
|
||||
|
@ -317,8 +317,8 @@
|
|||
"when_in_range": {
|
||||
"type": "minecraft:noise",
|
||||
"noise": "minecraft:ore_vein_b",
|
||||
"xz_scale": 8,
|
||||
"y_scale": 8
|
||||
"xz_scale": 16,
|
||||
"y_scale": 16
|
||||
},
|
||||
"when_out_of_range": 0
|
||||
}
|
||||
|
|
Reference in a new issue