mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 23:37:32 +00:00
Better Copy Handling
This commit is contained in:
1 parent
18d788974a
commit
270cb26460
15 files changed
+382
-52
No files matched your search
@@ -401,6 +401,24 @@ public class AbilityController implements IAbilityHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public Ability cloneCustomAbility(String originalName) {
|
||||
Ability original = customAbilities.get(originalName);
|
||||
if (original == null || original.isBuiltIn()) return null;
|
||||
|
||||
NBTTagCompound nbt = original.writeNBT(true);
|
||||
nbt.setString("id", UUID.randomUUID().toString());
|
||||
|
||||
Ability clone = fromNBT(nbt);
|
||||
if (clone == null) return null;
|
||||
|
||||
String name = clone.getName();
|
||||
while (customAbilities.containsKey(name)) name += "_";
|
||||
clone.setName(name);
|
||||
|
||||
saveCustomAbility(clone);
|
||||
return clone;
|
||||
}
|
||||
|
||||
public boolean deleteCustomAbility(String name) {
|
||||
if (name == null || name.isEmpty()) return false;
|
||||
|
||||
@@ -748,6 +766,24 @@ public class AbilityController implements IAbilityHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public ChainedAbility cloneChainedAbility(String originalName) {
|
||||
ChainedAbility original = chainedAbilities.get(originalName);
|
||||
if (original == null) return null;
|
||||
|
||||
NBTTagCompound nbt = original.writeNBT(true);
|
||||
nbt.setString("Id", UUID.randomUUID().toString());
|
||||
|
||||
ChainedAbility clone = new ChainedAbility();
|
||||
clone.readNBT(nbt);
|
||||
|
||||
String name = clone.getName();
|
||||
while (chainedAbilities.containsKey(name)) name += "_";
|
||||
clone.setName(name);
|
||||
|
||||
saveChainedAbility(clone);
|
||||
return clone;
|
||||
}
|
||||
|
||||
public boolean deleteChainedAbility(String name) {
|
||||
if (name == null || name.isEmpty()) return false;
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ import kamkeel.npcs.util.FileNameHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* A chained ability is an ordered sequence of ability references that execute
|
||||
|
||||
@@ -90,6 +90,7 @@ import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.AbilitiesNpcSavePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.BuiltInAbilityGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilitiesGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilityClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilityGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilityRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilitySavePacket;
|
||||
@@ -100,6 +101,7 @@ import kamkeel.npcs.network.packets.request.category.CategoryListRequestPacket;
|
||||
import kamkeel.npcs.network.packets.request.category.CategoryMoveItemPacket;
|
||||
import kamkeel.npcs.network.packets.request.category.CategoryRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.category.CategorySavePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilityClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilityRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilitySavePacket;
|
||||
@@ -136,6 +138,7 @@ import kamkeel.npcs.network.packets.request.dialog.DialogNpcSetPacket;
|
||||
import kamkeel.npcs.network.packets.request.dialog.DialogRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.dialog.DialogSavePacket;
|
||||
import kamkeel.npcs.network.packets.request.dialog.DialogsGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectSavePacket;
|
||||
@@ -156,6 +159,7 @@ import kamkeel.npcs.network.packets.request.jobs.JobSpawnerRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedGetAllPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemBuildPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemSavePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedNPCAddPacket;
|
||||
@@ -353,6 +357,7 @@ public class PacketHandler {
|
||||
REQUEST_PACKET.registerPacket(new LinkedItemSavePacket());
|
||||
REQUEST_PACKET.registerPacket(new LinkedItemRemovePacket());
|
||||
REQUEST_PACKET.registerPacket(new LinkedItemBuildPacket());
|
||||
REQUEST_PACKET.registerPacket(new LinkedItemClonePacket());
|
||||
|
||||
|
||||
// Bank Packets
|
||||
@@ -509,6 +514,7 @@ public class PacketHandler {
|
||||
REQUEST_PACKET.registerPacket(new EffectsGetPacket());
|
||||
REQUEST_PACKET.registerPacket(new EffectSavePacket());
|
||||
REQUEST_PACKET.registerPacket(new EffectRemovePacket());
|
||||
REQUEST_PACKET.registerPacket(new EffectClonePacket());
|
||||
|
||||
// Magic Packets
|
||||
REQUEST_PACKET.registerPacket(new MagicCycleRemovePacket());
|
||||
@@ -533,6 +539,8 @@ public class PacketHandler {
|
||||
REQUEST_PACKET.registerPacket(new ChainedAbilityGetPacket());
|
||||
REQUEST_PACKET.registerPacket(new ChainedAbilitySavePacket());
|
||||
REQUEST_PACKET.registerPacket(new ChainedAbilityRemovePacket());
|
||||
REQUEST_PACKET.registerPacket(new CustomAbilityClonePacket());
|
||||
REQUEST_PACKET.registerPacket(new ChainedAbilityClonePacket());
|
||||
|
||||
// Category Packets
|
||||
REQUEST_PACKET.registerPacket(new CategorySavePacket());
|
||||
|
||||
@@ -223,4 +223,9 @@ public enum EnumRequestPacket {
|
||||
CategoryListRequest,
|
||||
CategoryItemsRequest,
|
||||
AbilityCategoryMoveItem,
|
||||
|
||||
CustomAbilityClone,
|
||||
ChainedAbilityClone,
|
||||
LinkedItemClone,
|
||||
EffectClone,
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package kamkeel.npcs.network.packets.request.ability;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import kamkeel.npcs.controllers.AbilityController;
|
||||
import kamkeel.npcs.controllers.data.ability.data.ChainedAbility;
|
||||
import kamkeel.npcs.network.AbstractPacket;
|
||||
import kamkeel.npcs.network.PacketChannel;
|
||||
import kamkeel.npcs.network.PacketHandler;
|
||||
import kamkeel.npcs.network.PacketUtil;
|
||||
import kamkeel.npcs.network.enums.EnumItemPacketType;
|
||||
import kamkeel.npcs.network.enums.EnumRequestPacket;
|
||||
import kamkeel.npcs.network.packets.data.large.GuiDataPacket;
|
||||
import kamkeel.npcs.util.ByteBufUtils;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public final class ChainedAbilityClonePacket extends AbstractPacket {
|
||||
public static String packetName = "Request|ChainedAbilityClone";
|
||||
|
||||
private String name;
|
||||
|
||||
public ChainedAbilityClonePacket() {
|
||||
}
|
||||
|
||||
public ChainedAbilityClonePacket(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enum getType() {
|
||||
return EnumRequestPacket.ChainedAbilityClone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketChannel getChannel() {
|
||||
return PacketHandler.REQUEST_PACKET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.GLOBAL_ABILITY;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void sendData(ByteBuf out) throws IOException {
|
||||
ByteBufUtils.writeString(out, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
|
||||
if (!(player instanceof EntityPlayerMP))
|
||||
return;
|
||||
|
||||
if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player))
|
||||
return;
|
||||
|
||||
String chainName = ByteBufUtils.readString(in);
|
||||
ChainedAbility clone = AbilityController.Instance.cloneChainedAbility(chainName);
|
||||
if (clone != null) {
|
||||
NoppesUtilServer.sendChainedAbilitiesData((EntityPlayerMP) player);
|
||||
GuiDataPacket.sendGuiData((EntityPlayerMP) player, clone.writeNBT(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package kamkeel.npcs.network.packets.request.ability;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import kamkeel.npcs.controllers.AbilityController;
|
||||
import kamkeel.npcs.controllers.data.ability.Ability;
|
||||
import kamkeel.npcs.network.AbstractPacket;
|
||||
import kamkeel.npcs.network.PacketChannel;
|
||||
import kamkeel.npcs.network.PacketHandler;
|
||||
import kamkeel.npcs.network.PacketUtil;
|
||||
import kamkeel.npcs.network.enums.EnumItemPacketType;
|
||||
import kamkeel.npcs.network.enums.EnumRequestPacket;
|
||||
import kamkeel.npcs.network.packets.data.large.GuiDataPacket;
|
||||
import kamkeel.npcs.util.ByteBufUtils;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public final class CustomAbilityClonePacket extends AbstractPacket {
|
||||
public static String packetName = "Request|CustomAbilityClone";
|
||||
|
||||
private String name;
|
||||
|
||||
public CustomAbilityClonePacket() {
|
||||
}
|
||||
|
||||
public CustomAbilityClonePacket(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enum getType() {
|
||||
return EnumRequestPacket.CustomAbilityClone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketChannel getChannel() {
|
||||
return PacketHandler.REQUEST_PACKET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.GLOBAL_ABILITY;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void sendData(ByteBuf out) throws IOException {
|
||||
ByteBufUtils.writeString(out, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
|
||||
if (!(player instanceof EntityPlayerMP))
|
||||
return;
|
||||
|
||||
if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player))
|
||||
return;
|
||||
|
||||
String abilityName = ByteBufUtils.readString(in);
|
||||
Ability clone = AbilityController.Instance.cloneCustomAbility(abilityName);
|
||||
if (clone != null) {
|
||||
NoppesUtilServer.sendCustomAbilitiesData((EntityPlayerMP) player);
|
||||
GuiDataPacket.sendGuiData((EntityPlayerMP) player, clone.writeNBT(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package kamkeel.npcs.network.packets.request.effects;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import kamkeel.npcs.network.AbstractPacket;
|
||||
import kamkeel.npcs.network.PacketChannel;
|
||||
import kamkeel.npcs.network.PacketHandler;
|
||||
import kamkeel.npcs.network.PacketUtil;
|
||||
import kamkeel.npcs.network.enums.EnumItemPacketType;
|
||||
import kamkeel.npcs.network.enums.EnumRequestPacket;
|
||||
import kamkeel.npcs.network.packets.data.large.GuiDataPacket;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.controllers.CustomEffectController;
|
||||
import noppes.npcs.controllers.data.CustomEffect;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public final class EffectClonePacket extends AbstractPacket {
|
||||
public static String packetName = "Request|EffectClone";
|
||||
|
||||
private int id;
|
||||
|
||||
public EffectClonePacket() {
|
||||
}
|
||||
|
||||
public EffectClonePacket(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enum getType() {
|
||||
return EnumRequestPacket.EffectClone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketChannel getChannel() {
|
||||
return PacketHandler.REQUEST_PACKET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.GLOBAL_EFFECT;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void sendData(ByteBuf out) throws IOException {
|
||||
out.writeInt(this.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
|
||||
if (!(player instanceof EntityPlayerMP))
|
||||
return;
|
||||
if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player))
|
||||
return;
|
||||
|
||||
int effectId = in.readInt();
|
||||
CustomEffect clone = CustomEffectController.getInstance().cloneEffect(effectId);
|
||||
if (clone != null) {
|
||||
NoppesUtilServer.sendCustomEffectDataAll((EntityPlayerMP) player);
|
||||
GuiDataPacket.sendGuiData((EntityPlayerMP) player, clone.writeToNBT(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package kamkeel.npcs.network.packets.request.linked;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import kamkeel.npcs.network.AbstractPacket;
|
||||
import kamkeel.npcs.network.PacketChannel;
|
||||
import kamkeel.npcs.network.PacketHandler;
|
||||
import kamkeel.npcs.network.PacketUtil;
|
||||
import kamkeel.npcs.network.enums.EnumItemPacketType;
|
||||
import kamkeel.npcs.network.enums.EnumRequestPacket;
|
||||
import kamkeel.npcs.network.packets.data.large.GuiDataPacket;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.controllers.LinkedItemController;
|
||||
import noppes.npcs.controllers.data.LinkedItem;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public final class LinkedItemClonePacket extends AbstractPacket {
|
||||
public static String packetName = "Request|LinkedItemClone";
|
||||
|
||||
private int id;
|
||||
|
||||
public LinkedItemClonePacket() {
|
||||
}
|
||||
|
||||
public LinkedItemClonePacket(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enum getType() {
|
||||
return EnumRequestPacket.LinkedItemClone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketChannel getChannel() {
|
||||
return PacketHandler.REQUEST_PACKET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.GLOBAL_LINKED;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void sendData(ByteBuf out) throws IOException {
|
||||
out.writeInt(this.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
|
||||
if (!(player instanceof EntityPlayerMP))
|
||||
return;
|
||||
if (!PacketUtil.verifyItemPacket(packetName, EnumItemPacketType.WAND, player))
|
||||
return;
|
||||
|
||||
int linkedId = in.readInt();
|
||||
LinkedItem clone = LinkedItemController.getInstance().cloneLinkedItem(linkedId);
|
||||
if (clone != null) {
|
||||
NoppesUtilServer.sendLinkedItemDataAll((EntityPlayerMP) player);
|
||||
GuiDataPacket.sendGuiData((EntityPlayerMP) player, clone.writeToNBT(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,12 @@ import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance;
|
||||
import kamkeel.npcs.network.PacketClient;
|
||||
import kamkeel.npcs.network.packets.request.ability.BuiltInAbilityGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilityGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilityClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilityRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.ChainedAbilitySavePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilitiesGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilityGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilityClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilityRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.ability.CustomAbilitySavePacket;
|
||||
import kamkeel.npcs.network.packets.request.category.AbilityCategoryMovePacket;
|
||||
@@ -271,24 +273,11 @@ public class GuiAbilityDirectory extends GuiDirectoryCategorized
|
||||
protected void onCloneItem() {
|
||||
if (currentIsBuiltIn) return;
|
||||
if (isChainedMode() && selectedChain != null) {
|
||||
ChainedAbility clone = new ChainedAbility();
|
||||
NBTTagCompound chainNbt = selectedChain.writeNBT(true);
|
||||
chainNbt.setString("Id", UUID.randomUUID().toString());
|
||||
clone.readNBT(chainNbt);
|
||||
String cloneName = selectedChain.getName() + "_copy";
|
||||
clone.setName(cloneName);
|
||||
PacketClient.sendClient(new ChainedAbilitySavePacket(clone.writeNBT(true)));
|
||||
PacketClient.sendClient(new ChainedAbilityClonePacket(selectedChain.getName()));
|
||||
if (selectedCatId >= 0) requestItemsInCategory(selectedCatId);
|
||||
} else if (selectedAbility != null) {
|
||||
NBTTagCompound abilityNbt = selectedAbility.writeNBT(true);
|
||||
abilityNbt.setString("id", UUID.randomUUID().toString());
|
||||
Ability clone = AbilityController.Instance.fromNBT(abilityNbt);
|
||||
if (clone != null) {
|
||||
String cloneName = selectedAbility.getName() + "_copy";
|
||||
clone.setName(cloneName);
|
||||
PacketClient.sendClient(new CustomAbilitySavePacket(clone.writeNBT(true)));
|
||||
if (selectedCatId >= 0 && isCustomMode()) requestItemsInCategory(selectedCatId);
|
||||
}
|
||||
PacketClient.sendClient(new CustomAbilityClonePacket(selectedAbility.getName()));
|
||||
if (selectedCatId >= 0 && isCustomMode()) requestItemsInCategory(selectedCatId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import kamkeel.npcs.network.packets.request.category.CategoryRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.category.CategorySavePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectSavePacket;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
@@ -89,12 +90,7 @@ public class GuiEffectDirectory extends GuiDirectoryCategorized {
|
||||
@Override
|
||||
protected void onCloneItem() {
|
||||
if (effect != null && effect.id >= 0) {
|
||||
NBTTagCompound cloneNbt = effect.writeToNBT(true);
|
||||
cloneNbt.setInteger("ID", -1);
|
||||
String name = cloneNbt.getString("name");
|
||||
while (itemData.containsKey(name)) name += "_";
|
||||
cloneNbt.setString("name", name);
|
||||
PacketClient.sendClient(new EffectSavePacket(cloneNbt, ""));
|
||||
PacketClient.sendClient(new EffectClonePacket(effect.id));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import kamkeel.npcs.network.packets.request.category.CategorySavePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemBuildPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemSavePacket;
|
||||
import kamkeel.npcs.util.ColorUtil;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
@@ -90,12 +91,7 @@ public class GuiLinkedItemDirectory extends GuiDirectoryCategorized {
|
||||
@Override
|
||||
protected void onCloneItem() {
|
||||
if (linkedItem != null && linkedItem.id >= 0) {
|
||||
NBTTagCompound cloneNbt = linkedItem.writeToNBT(true);
|
||||
cloneNbt.setInteger("Id", -1);
|
||||
String name = cloneNbt.getString("Name");
|
||||
while (itemData.containsKey(name)) name += "_";
|
||||
cloneNbt.setString("Name", name);
|
||||
PacketClient.sendClient(new LinkedItemSavePacket(cloneNbt, ""));
|
||||
PacketClient.sendClient(new LinkedItemClonePacket(linkedItem.id));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package noppes.npcs.client.gui.global;
|
||||
import kamkeel.npcs.network.PacketClient;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectSavePacket;
|
||||
import kamkeel.npcs.network.packets.request.effects.EffectsGetPacket;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
@@ -106,10 +107,9 @@ public class GuiNPCManageEffects extends GuiNPCInterface2 implements ICustomScro
|
||||
displayGuiScreen(guiyesno);
|
||||
}
|
||||
} else if (button.id == 2) {
|
||||
CustomEffect effect = this.effect.cloneEffect();
|
||||
while (data.containsKey(effect.name))
|
||||
effect.name += "_";
|
||||
PacketClient.sendClient(new EffectSavePacket(effect.writeToNBT(false), ""));
|
||||
if (effect != null && effect.id >= 0) {
|
||||
PacketClient.sendClient(new EffectClonePacket(effect.id));
|
||||
}
|
||||
}
|
||||
|
||||
if (button.id == 66) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import kamkeel.npcs.network.packets.request.linked.LinkedGetAllPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedGetPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemBuildPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemRemovePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemClonePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedItemSavePacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedNPCAddPacket;
|
||||
import kamkeel.npcs.network.packets.request.linked.LinkedNPCRemovePacket;
|
||||
@@ -288,13 +289,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData,
|
||||
}
|
||||
if (button.id == 4) {
|
||||
if (data.containsKey(scroll.getSelected()) && linkedItem != null && linkedItem.id >= 0) {
|
||||
String name = linkedItem.name;
|
||||
while (data.containsKey(name))
|
||||
name += "_";
|
||||
LinkedItem linkedItemClone = this.linkedItem.clone();
|
||||
linkedItemClone.name = name;
|
||||
linkedItemClone.id = -1;
|
||||
PacketClient.sendClient(new LinkedItemSavePacket(linkedItemClone.writeToNBT(false), ""));
|
||||
PacketClient.sendClient(new LinkedItemClonePacket(this.linkedItem.id));
|
||||
}
|
||||
}
|
||||
if (button.id == 5) {
|
||||
|
||||
@@ -673,13 +673,7 @@ public class CustomEffectController implements ICustomEffectHandler {
|
||||
@Override
|
||||
public ICustomEffect saveEffect(ICustomEffect customEffect) {
|
||||
if (customEffect.getID() < 0) {
|
||||
int oldId = customEffect.getID();
|
||||
customEffect.setID(getUnusedId());
|
||||
// Move script handler from old ID to new ID (e.g. during clone)
|
||||
EffectScript handler = customEffectScriptHandlers.remove(oldId);
|
||||
if (handler != null) {
|
||||
customEffectScriptHandlers.put(customEffect.getID(), handler);
|
||||
}
|
||||
while (has(customEffect.getName()))
|
||||
customEffect.setName(customEffect.getName() + "_");
|
||||
}
|
||||
@@ -714,4 +708,23 @@ public class CustomEffectController implements ICustomEffectHandler {
|
||||
return getCustomEffects().get(customEffect.getID());
|
||||
}
|
||||
|
||||
public CustomEffect cloneEffect(int originalId) {
|
||||
CustomEffect original = getCustomEffects().get(originalId);
|
||||
if (original == null) return null;
|
||||
|
||||
NBTTagCompound nbt = original.writeToNBT(true);
|
||||
int newId = getUnusedId();
|
||||
nbt.setInteger("ID", newId);
|
||||
|
||||
CustomEffect clone = new CustomEffect();
|
||||
clone.readFromNBT(nbt);
|
||||
|
||||
String name = clone.getName();
|
||||
while (has(name)) name += "_";
|
||||
clone.name = name;
|
||||
|
||||
saveEffect(clone);
|
||||
return clone;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -209,13 +209,7 @@ public class LinkedItemController implements ILinkedItemHandler {
|
||||
|
||||
public ILinkedItem saveLinkedItem(ILinkedItem linkedItem) {
|
||||
if (linkedItem.getId() < 0) {
|
||||
int oldId = linkedItem.getId();
|
||||
linkedItem.setId(getUnusedId());
|
||||
// Move script handler from old ID to new ID (e.g. during clone)
|
||||
LinkedItemScript handler = linkedItemsScripts.remove(oldId);
|
||||
if (handler != null) {
|
||||
linkedItemsScripts.put(linkedItem.getId(), handler);
|
||||
}
|
||||
while (hasName(linkedItem.getName()))
|
||||
linkedItem.setName(linkedItem.getName() + "_");
|
||||
}
|
||||
@@ -247,6 +241,25 @@ public class LinkedItemController implements ILinkedItemHandler {
|
||||
return linkedItems.get(linkedItem.getId());
|
||||
}
|
||||
|
||||
public LinkedItem cloneLinkedItem(int originalId) {
|
||||
LinkedItem original = linkedItems.get(originalId);
|
||||
if (original == null) return null;
|
||||
|
||||
NBTTagCompound nbt = original.writeToNBT(true);
|
||||
int newId = getUnusedId();
|
||||
nbt.setInteger("Id", newId);
|
||||
|
||||
LinkedItem clone = new LinkedItem();
|
||||
clone.readFromNBT(nbt);
|
||||
|
||||
String name = clone.getName();
|
||||
while (hasName(name)) name += "_";
|
||||
clone.name = name;
|
||||
|
||||
saveLinkedItem(clone);
|
||||
return clone;
|
||||
}
|
||||
|
||||
private boolean hasOther(String name, int id) {
|
||||
for (LinkedItem linkedItem : linkedItems.values()) {
|
||||
if (linkedItem.getId() != id && linkedItem.getName().equalsIgnoreCase(name))
|
||||
|
||||
Reference in new issue
Block a user