/*
* KubaTech - Gregtech Addon Copyright (C) 2022 - 2023 kuba6000 This library is free software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in
* the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have
* received a copy of the GNU Lesser General Public License along with this library. If not, see
* .
*/
package kubatech.config;
import java.io.File;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import kubatech.Tags;
import kubatech.api.ConstructableItemStack;
import kubatech.api.LoaderReference;
import kubatech.api.helpers.ReflectionHelper;
import kubatech.api.mobhandler.MobDrop;
import kubatech.api.utils.GSONUtils;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.JsonToNBT;
import net.minecraft.nbt.NBTTagCompound;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.dreammaster.main.MainRegistry;
import com.dreammaster.modcustomdrops.CustomDrops;
import com.google.common.io.Files;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import cpw.mods.fml.common.registry.GameRegistry;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
public class OverridesConfig {
private static final Logger LOG = LogManager.getLogger(Tags.MODID + "[Config-Overrides]");
public static class MobDropSimplified {
@GSONUtils.SkipGSON
ItemStack stack;
ConstructableItemStack reconstructableStack;
MobDrop.DropType type;
private MobDropSimplified() {}
public MobDropSimplified(ItemStack stack, MobDrop.DropType type) {
reconstructableStack = new ConstructableItemStack(stack);
this.type = type;
}
public void reconstructStack() {
stack = reconstructableStack.construct();
}
public boolean isMatching(MobDrop drop) {
return reconstructableStack.isSame(drop.reconstructableStack, true);
}
private static final ByteBuf BufHelper = Unpooled.buffer();
public void writeToByteBuf(ByteBuf byteBuf) {
BufHelper.clear();
reconstructableStack.writeToByteBuf(BufHelper);
BufHelper.writeInt(type.ordinal());
byteBuf.writeInt(BufHelper.readableBytes());
byteBuf.writeBytes(BufHelper);
}
public static MobDropSimplified readFromByteBuf(ByteBuf byteBuf) {
MobDropSimplified mobDropSimplified = new MobDropSimplified();
int size = byteBuf.readInt();
mobDropSimplified.reconstructableStack = ConstructableItemStack.readFromByteBuf(byteBuf);
mobDropSimplified.type = MobDrop.DropType.get(byteBuf.readInt());
mobDropSimplified.reconstructStack();
return mobDropSimplified;
}
}
public static class MobOverride {
public boolean removeAll = false;
public List additions = new ArrayList<>();
public List removals = new ArrayList<>();
private static final ByteBuf BufHelper = Unpooled.buffer();
public void writeToByteBuf(ByteBuf byteBuf) {
BufHelper.clear();
BufHelper.writeBoolean(removeAll);
BufHelper.writeInt(additions.size());
additions.forEach(drop -> drop.writeToByteBuf(BufHelper));
BufHelper.writeInt(removals.size());
removals.forEach(drop -> drop.writeToByteBuf(BufHelper));
byteBuf.writeInt(BufHelper.readableBytes());
byteBuf.writeBytes(BufHelper);
}
public static MobOverride readFromByteBuf(ByteBuf byteBuf) {
int size = byteBuf.readInt();
MobOverride mobOverride = new MobOverride();
mobOverride.removeAll = byteBuf.readBoolean();
int additionssize = byteBuf.readInt();
for (int i = 0; i < additionssize; i++) mobOverride.additions.add(MobDrop.readFromByteBuf(byteBuf));
int removalssize = byteBuf.readInt();
for (int i = 0; i < removalssize; i++) mobOverride.removals.add(MobDropSimplified.readFromByteBuf(byteBuf));
return mobOverride;
}
}
public static Map overrides = new HashMap<>();
private static File overrideFile = null;
private static final Gson gson = GSONUtils.GSON_BUILDER_PRETTY.create();
@SuppressWarnings("UnstableApiUsage")
public static void LoadConfig() {
LOG.info("Loading Config");
if (overrideFile == null) overrideFile = Config.getConfigFile("MobOverrides.cfg");
if (!overrideFile.exists()) writeExampleFile();
Reader reader = null;
try {
reader = Files.newReader(overrideFile, StandardCharsets.UTF_8);
overrides = gson.fromJson(reader, new TypeToken