Started work on Script Reload Listener

This commit is contained in:
Tschipp 2020-09-06 18:33:26 +02:00
parent 2820c9fb3b
commit ceed903993
3 changed files with 185 additions and 21 deletions

View File

@ -1,6 +1,7 @@
package tschipp.carryon.common.scripting;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.PacketBuffer;
public class CarryOnOverride
{
@ -46,16 +47,14 @@ public class CarryOnOverride
private boolean isBlock;
private boolean isEntity;
private final String path;
private String resourceLocation;
public CarryOnOverride(String path)
{
this.path = path;
this.resourceLocation = path;
}
public String getCommandInit()
{
return commandInit;
@ -131,7 +130,7 @@ public class CarryOnOverride
{
final int prime = 31;
int result = 1;
result = prime * result + ((path == null) ? 0 : path.hashCode());
result = prime * result + ((resourceLocation == null) ? 0 : resourceLocation.hashCode());
return result;
}
@ -225,12 +224,12 @@ public class CarryOnOverride
return false;
if (isEntity != other.isEntity)
return false;
if (path == null)
if (resourceLocation == null)
{
if (other.path != null)
if (other.resourceLocation != null)
return false;
}
else if (!path.equals(other.path))
else if (!resourceLocation.equals(other.resourceLocation))
return false;
if (renderLeftArm != other.renderLeftArm)
return false;
@ -620,6 +619,100 @@ public class CarryOnOverride
this.commandPlace = commandPlace;
}
public void serialize(PacketBuffer buf)
{
// BLOCKS
buf.writeCompoundTag(typeBlockTag);
buf.writeString(typeNameBlock);
buf.writeString(typeMaterial);
buf.writeString(typeHardness);
buf.writeString(typeResistance);
// ENTITIES
buf.writeCompoundTag(typeEntityTag);
buf.writeString(typeNameEntity);
buf.writeString(typeHeight);
buf.writeString(typeWidth);
buf.writeString(typeHealth);
// CONDITIONS
buf.writeString(conditionGamestage);
buf.writeString(conditionAchievement);
buf.writeString(conditionXp);
buf.writeString(conditionGamemode);
buf.writeString(conditionScoreboard);
buf.writeString(conditionPosition);
buf.writeString(conditionEffects);
// RENDER
buf.writeString(renderNameBlock);
buf.writeString(renderNameEntity);
buf.writeCompoundTag(renderNBT);
buf.writeString(renderTranslation);
buf.writeString(renderRotation);
buf.writeString(renderscaled);
buf.writeString(renderRotationLeftArm);
buf.writeString(renderRotationRightArm);
buf.writeBoolean(renderLeftArm);
buf.writeBoolean(renderRightArm);
//EFFECTS
buf.writeString(commandInit);
buf.writeString(commandLoop);
buf.writeString(commandPlace);
buf.writeBoolean(isBlock);
buf.writeBoolean(isEntity);
buf.writeString(resourceLocation);
}
public static CarryOnOverride deserialize(PacketBuffer buf)
{
CarryOnOverride override = new CarryOnOverride("");
override.typeBlockTag = buf.readCompoundTag();
override.typeNameBlock = buf.readString();
override.typeMaterial = buf.readString();
override.typeHardness = buf.readString();
override.typeResistance = buf.readString();
// ENTITIES
override.typeEntityTag = buf.readCompoundTag();
override.typeNameEntity = buf.readString();
override.typeHeight = buf.readString();
override.typeWidth = buf.readString();
override.typeHealth = buf.readString();
// CONDITIONS
override.conditionGamestage = buf.readString();
override.conditionAchievement = buf.readString();
override.conditionXp = buf.readString();
override.conditionGamemode = buf.readString();
override.conditionScoreboard = buf.readString();
override.conditionPosition = buf.readString();
override.conditionEffects = buf.readString();
// RENDER
override.renderNameBlock = buf.readString();
override.renderNameEntity = buf.readString();
override.renderNBT = buf.readCompoundTag();
override.renderTranslation = buf.readString();
override.renderRotation = buf.readString();
override.renderscaled = buf.readString();
override.renderRotationLeftArm = buf.readString();
override.renderRotationRightArm = buf.readString();
override.renderLeftArm = buf.readBoolean();
override.renderRightArm = buf.readBoolean();
//EFFECTS
override.commandInit = buf.readString();
override.commandLoop = buf.readString();
override.commandPlace = buf.readString();
override.isBlock = buf.readBoolean();
override.isEntity = buf.readBoolean();
override.resourceLocation = buf.readString();
return override;
}
}

View File

@ -0,0 +1,52 @@
package tschipp.carryon.common.scripting;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import net.minecraft.client.resources.JsonReloadListener;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import net.minecraftforge.fml.common.thread.EffectiveSide;
import net.minecraftforge.fml.network.PacketDistributor;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
import tschipp.carryon.CarryOn;
import tschipp.carryon.network.client.ScriptReloadPacket;
@EventBusSubscriber(modid = CarryOn.MODID, bus = Bus.FORGE)
public class ScriptReloadListener extends JsonReloadListener
{
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create();
public ScriptReloadListener()
{
super(GSON, "carryon/scripts");
}
@Override
protected void apply(Map<ResourceLocation, JsonObject> objects, IResourceManager manager, IProfiler profiler)
{
ScriptReader.OVERRIDES.clear();
objects.forEach((path, jsonObj) -> {
CarryOnOverride override = GSON.fromJson(jsonObj, CarryOnOverride.class);
ScriptReader.OVERRIDES.put(override.hashCode(), override);
});
if (EffectiveSide.get().isServer() && ServerLifecycleHooks.getCurrentServer() != null)
{
CarryOn.network.send(PacketDistributor.ALL.noArg(), new ScriptReloadPacket(ScriptReader.OVERRIDES.values()));
}
}
public static void onDatapackRegister(AddReloadListenerEvent event)
{
}
}

View File

@ -1,39 +1,58 @@
package tschipp.carryon.network.client;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Supplier;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.network.NetworkEvent;
import tschipp.carryon.CarryOn;
import tschipp.carryon.common.scripting.CarryOnOverride;
import tschipp.carryon.common.scripting.ScriptReader;
public class ScriptReloadPacket
{
private List<CarryOnOverride> overrides = new ArrayList<CarryOnOverride>();
public ScriptReloadPacket()
{
}
public ScriptReloadPacket(ByteBuf buf)
public ScriptReloadPacket(Collection<CarryOnOverride> collection)
{
overrides.addAll(collection);
}
public void toBytes(ByteBuf buf)
public ScriptReloadPacket(PacketBuffer buf)
{
int size = buf.readInt();
for(int i = 0; i < size; i++)
{
overrides.add(CarryOnOverride.deserialize(buf));
}
}
public void toBytes(PacketBuffer buf)
{
buf.writeInt(overrides.size());
overrides.forEach(override -> override.serialize(buf));
}
public void handle(Supplier<NetworkEvent.Context> ctx)
{
ctx.get().enqueueWork(() -> {
if (ctx.get().getDirection().getReceptionSide().isClient())
{
ctx.get().enqueueWork(() -> {
PlayerEntity player = CarryOn.proxy.getPlayer();
ScriptReader.OVERRIDES.clear();
overrides.forEach(override -> {
ScriptReader.OVERRIDES.put(override.hashCode(), override);
});
if (player != null)
ScriptReader.reloadScripts();
ctx.get().setPacketHandled(true);
});
ctx.get().setPacketHandled(true);
});
}
}
}