mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 08:27:45 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
8f5df6b661
16 files changed
+366
-226
No files matched your search
@@ -120,8 +120,14 @@ public class CustomNpcs {
|
||||
@ConfigProp(info = "Normal players can use soulstone on animals")
|
||||
public static boolean SoulStoneAnimals = true;
|
||||
|
||||
@ConfigProp(info = "Normal players can use soulstone on villagers")
|
||||
public static boolean SoulStoneVillagers = false;
|
||||
|
||||
@ConfigProp(info = "Normal players can use soulstone on all npcs")
|
||||
public static boolean SoulStoneNPCs = false;
|
||||
|
||||
@ConfigProp(info = "Normal players can use soulstone on friendly npcs")
|
||||
public static boolean SoulStoneFriendlyNPCs = false;
|
||||
|
||||
@ConfigProp(info="When set to Minecraft it will use minecrafts font, when Default it will use OpenSans. Can only use fonts installed on your PC")
|
||||
public static String FontType = "Default";
|
||||
|
||||
@@ -53,6 +53,11 @@ public class DataAdvanced {
|
||||
public boolean attackOtherFactions = false;
|
||||
public boolean defendFaction = false;
|
||||
public boolean disablePitch = false;
|
||||
|
||||
public String soulStonePlayerName = "";
|
||||
public boolean refuseSoulStone = false;
|
||||
public boolean soulStoneInit = false;
|
||||
public int minFactionPointsToSoulStone = -1;
|
||||
|
||||
public DataAdvanced(EntityNPCInterface npc) {
|
||||
this.npc = npc;
|
||||
@@ -84,6 +89,10 @@ public class DataAdvanced {
|
||||
|
||||
compound.setTag("NPCDialogOptions", nbtDialogs(npc.dialogs));
|
||||
|
||||
compound.setBoolean("RefuseSoulStone", refuseSoulStone);
|
||||
compound.setString("SoulStonePlayerName", soulStonePlayerName);
|
||||
compound.setInteger("MinFactionPointsToSoulStone", minFactionPointsToSoulStone);
|
||||
|
||||
return compound;
|
||||
}
|
||||
|
||||
@@ -114,6 +123,10 @@ public class DataAdvanced {
|
||||
factions.readFromNBT(compound.getCompoundTag("FactionPoints"));
|
||||
|
||||
npc.dialogs = getDialogs(compound.getTagList("NPCDialogOptions", 10));
|
||||
|
||||
refuseSoulStone = compound.getBoolean("RefuseSoulStone");
|
||||
soulStonePlayerName = compound.getString("SoulStonePlayerName");
|
||||
minFactionPointsToSoulStone = compound.getInteger("MinFactionPointsToSoulStone");
|
||||
}
|
||||
|
||||
private HashMap<Integer, DialogOption> getDialogs(NBTTagList tagList) {
|
||||
|
||||
@@ -123,6 +123,7 @@ public class EventHooks {
|
||||
ScriptController.Instance.npcScripts.callScript(EnumScriptType.INIT, event);
|
||||
npc.script.callScript(EnumScriptType.INIT, event);
|
||||
NpcAPI.EVENT_BUS.post(event);
|
||||
npc.advanced.soulStoneInit = false;
|
||||
}
|
||||
|
||||
public static void onNPCUpdate(EntityNPCInterface npc) {
|
||||
|
||||
@@ -39,96 +39,96 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
public HashMap<String,Class<? extends EntityLivingBase>> data = new HashMap<String, Class<? extends EntityLivingBase>>();
|
||||
private List<String> list;
|
||||
private final String[] ignoredTags = {"CanBreakDoors", "Bred", "PlayerCreated", "Tame", "HasReproduced"};
|
||||
|
||||
|
||||
private GuiNpcButton prev,next;
|
||||
|
||||
private GuiScreen parent;
|
||||
|
||||
|
||||
private HashMap<Integer, String> mapped = new HashMap<Integer, String>();
|
||||
|
||||
|
||||
public GuiCreationScreen(GuiScreen parent, EntityCustomNpc npc){
|
||||
super(npc);
|
||||
this.parent = parent;
|
||||
Map<?,?> mapping = EntityList.stringToClassMapping;
|
||||
for(Object name : mapping.keySet()){
|
||||
Class<?> c = (Class<?>) mapping.get(name);
|
||||
try {
|
||||
if(!EntityCustomNpc.class.isAssignableFrom(c) && EntityLiving.class.isAssignableFrom(c) && c.getConstructor(new Class[] {World.class}) != null && !Modifier.isAbstract(c.getModifiers())){
|
||||
if(RenderManager.instance.getEntityClassRenderObject(c) instanceof RendererLivingEntity)
|
||||
data.put(name.toString(),c.asSubclass(EntityLivingBase.class));
|
||||
}
|
||||
Map<?,?> mapping = EntityList.stringToClassMapping;
|
||||
for(Object name : mapping.keySet()){
|
||||
Class<?> c = (Class<?>) mapping.get(name);
|
||||
try {
|
||||
if(!EntityCustomNpc.class.isAssignableFrom(c) && EntityLiving.class.isAssignableFrom(c) && c.getConstructor(new Class[] {World.class}) != null && !Modifier.isAbstract(c.getModifiers())){
|
||||
if(RenderManager.instance.getEntityClassRenderObject(c) instanceof RendererLivingEntity)
|
||||
data.put(name.toString(),c.asSubclass(EntityLivingBase.class));
|
||||
}
|
||||
} catch (SecurityException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchMethodException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
list = new ArrayList<String>(data.keySet());
|
||||
Collections.sort(list,String.CASE_INSENSITIVE_ORDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
EntityLivingBase entity = (EntityLivingBase) playerdata.getEntity(npc);
|
||||
xOffset = entity == null?0:50;
|
||||
super.initGui();
|
||||
@Override
|
||||
public void initGui() {
|
||||
EntityLivingBase entity = (EntityLivingBase) playerdata.getEntity(npc);
|
||||
xOffset = entity == null?0:50;
|
||||
super.initGui();
|
||||
|
||||
String title = "CustomNPC";
|
||||
if(entity != null)
|
||||
title = (String) EntityList.classToStringMapping.get(playerdata.getEntityClass());
|
||||
this.addButton(new GuiNpcButton(1, guiLeft + 140, guiTop, 100, 20, title));
|
||||
String title = "CustomNPC";
|
||||
if(entity != null)
|
||||
title = (String) EntityList.classToStringMapping.get(playerdata.getEntityClass());
|
||||
this.addButton(new GuiNpcButton(1, guiLeft + 140, guiTop, 100, 20, title));
|
||||
|
||||
this.addButton(prev = new GuiNpcButton(0, guiLeft + 118, guiTop, 20, 20, "<"));
|
||||
this.addButton(next = new GuiNpcButton(2, guiLeft + 242, guiTop, 20, 20, ">"));
|
||||
prev.enabled = getCurrentEntityIndex() >= 0;
|
||||
next.enabled = getCurrentEntityIndex() < list.size() - 1;
|
||||
|
||||
if(entity == null){
|
||||
showPlayerButtons();
|
||||
}
|
||||
else if(PixelmonHelper.isPixelmon(entity)){
|
||||
showPixelmonMenu(entity);
|
||||
}
|
||||
else{
|
||||
showEntityButtons(entity);
|
||||
}
|
||||
}
|
||||
|
||||
this.addButton(prev = new GuiNpcButton(0, guiLeft + 118, guiTop, 20, 20, "<"));
|
||||
this.addButton(next = new GuiNpcButton(2, guiLeft + 242, guiTop, 20, 20, ">"));
|
||||
prev.enabled = getCurrentEntityIndex() >= 0;
|
||||
next.enabled = getCurrentEntityIndex() < list.size() - 1;
|
||||
|
||||
if(entity == null){
|
||||
showPlayerButtons();
|
||||
}
|
||||
else if(PixelmonHelper.isPixelmon(entity)){
|
||||
showPixelmonMenu(entity);
|
||||
}
|
||||
else{
|
||||
showEntityButtons(entity);
|
||||
}
|
||||
}
|
||||
|
||||
private void showPlayerButtons() {
|
||||
int y = guiTop ;
|
||||
|
||||
addButton(new GuiNpcButton(8, guiLeft + 4, y += 22, 96, 20, "model.scale"));
|
||||
|
||||
addButton(new GuiNpcButton(4, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addButton(new GuiNpcButton(8, guiLeft + 4, y += 22, 96, 20, "model.scale"));
|
||||
|
||||
addButton(new GuiNpcButton(4, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addLabel(new GuiNpcLabel(1, "Head", guiLeft, y + 5, 0xFFFFFF));
|
||||
|
||||
addButton(new GuiNpcButton(5, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addButton(new GuiNpcButton(5, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addLabel(new GuiNpcLabel(2, "Body", guiLeft, y + 5, 0xFFFFFF));
|
||||
|
||||
addButton(new GuiNpcButton(6, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
|
||||
addButton(new GuiNpcButton(6, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addLabel(new GuiNpcLabel(3, "Arms", guiLeft, y + 5, 0xFFFFFF));
|
||||
|
||||
addButton(new GuiNpcButton(7, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addButton(new GuiNpcButton(7, guiLeft + 50, y += 22, 50, 20, "selectServer.edit"));
|
||||
addLabel(new GuiNpcLabel(4, "Legs", guiLeft, y + 5, 0xFFFFFF));
|
||||
|
||||
addButton(new GuiNpcButton(250, guiLeft + 50, y += 22, 50, 20, new String[]{"Default","Steve64","Alex"}, this.npc.display.modelType));
|
||||
addLabel(new GuiNpcLabel(250, "Model", guiLeft, y + 5, 0xFFFFFF));
|
||||
|
||||
addButton(new GuiNpcButton(44, guiLeft + 310, guiTop + 14, 80, 20, "Save Model"));
|
||||
addButton(new GuiNpcButton(45, guiLeft + 310, guiTop + 36, 80, 20, "Load Model"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void showPixelmonMenu(EntityLivingBase entity) {
|
||||
|
||||
addButton(new GuiNpcButton(44, guiLeft + 310, guiTop + 14, 80, 20, "Save Model"));
|
||||
addButton(new GuiNpcButton(45, guiLeft + 310, guiTop + 36, 80, 20, "Load Model"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void showPixelmonMenu(EntityLivingBase entity) {
|
||||
GuiCustomScroll scroll = new GuiCustomScroll(this, 0);
|
||||
scroll.setSize(120, 200);
|
||||
scroll.guiLeft = guiLeft;
|
||||
scroll.guiTop = guiTop + 20;
|
||||
addScroll(scroll);
|
||||
|
||||
|
||||
scroll.setList(PixelmonHelper.getPixelmonList());
|
||||
scroll.setSelected(PixelmonHelper.getName(entity));
|
||||
|
||||
|
||||
Minecraft.getMinecraft().thePlayer.sendChatMessage(PixelmonHelper.getName(entity));
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
if(entity instanceof EntityNPCInterface)
|
||||
return;
|
||||
int y = guiTop + 20;
|
||||
|
||||
|
||||
NBTTagCompound compound = getExtras(entity);
|
||||
Set<String> keys = compound.func_150296_c();
|
||||
int i = 0;
|
||||
@@ -148,7 +148,7 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
if(name.equals("Age")){
|
||||
i++;
|
||||
addLabel(new GuiNpcLabel(0, "Child", guiLeft, y + 5 + i * 22, 0xFFFFFF));
|
||||
addButton(new GuiNpcButton(30, guiLeft + 80, y + i * 22, 50, 20, new String[]{"gui.no","gui.yes"},entity.isChild()?1:0));
|
||||
addButton(new GuiNpcButton(30, guiLeft + 80, y + i * 22, 50, 20, new String[]{"gui.no","gui.yes"},entity.isChild()?1:0));
|
||||
}
|
||||
else if(base.getId() == 1){
|
||||
byte b = ((NBTTagByte)base).func_150290_f();
|
||||
@@ -158,9 +158,9 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
b = playerdata.extra.getByte(name);
|
||||
i++;
|
||||
addLabel(new GuiNpcLabel(100 + i, name, guiLeft, y + 5 + i * 22, 0xFFFFFF));
|
||||
addButton(new GuiNpcButton(100 + i, guiLeft + 80, y + i * 22, 50, 20, new String[]{"gui.no","gui.yes"}, b));
|
||||
|
||||
mapped.put(i, name);
|
||||
addButton(new GuiNpcButton(100 + i, guiLeft + 80, y + i * 22, 50, 20, new String[]{"gui.no","gui.yes"}, b));
|
||||
|
||||
mapped.put(i, name);
|
||||
}
|
||||
}
|
||||
if(EntityList.getEntityString(entity).equals("doggystyle.Dog")){
|
||||
@@ -169,11 +169,11 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
Method method = entity.getClass().getMethod("getBreedID");
|
||||
breed = (Integer) method.invoke(entity);
|
||||
} catch (Exception e) {
|
||||
|
||||
|
||||
}
|
||||
i++;
|
||||
addLabel(new GuiNpcLabel(201, "Breed", guiLeft, y + 5 + i * 22, 0xFFFFFF));
|
||||
addButton(new GuiNpcButton(201, guiLeft + 80, y + i * 22, 50, 20, new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"}, breed));
|
||||
addButton(new GuiNpcButton(201, guiLeft + 80, y + i * 22, 50, 20, new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"}, breed));
|
||||
}
|
||||
}
|
||||
private boolean isIgnored(String tag){
|
||||
@@ -186,88 +186,88 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
private NBTTagCompound getExtras(EntityLivingBase entity) {
|
||||
NBTTagCompound fake = new NBTTagCompound();
|
||||
new EntityFakeLiving(entity.worldObj).writeEntityToNBT(fake);
|
||||
|
||||
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
try{
|
||||
entity.writeEntityToNBT(compound);
|
||||
}
|
||||
catch(Exception e){
|
||||
|
||||
|
||||
}
|
||||
Set<String> keys = fake.func_150296_c();
|
||||
for(String name : keys)
|
||||
compound.removeTag(name);
|
||||
|
||||
|
||||
return compound;
|
||||
}
|
||||
|
||||
private int getCurrentEntityIndex(){
|
||||
return list.indexOf(EntityList.classToStringMapping.get(playerdata.getEntityClass()));
|
||||
}
|
||||
return list.indexOf(EntityList.classToStringMapping.get(playerdata.getEntityClass()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton btn) {
|
||||
super.actionPerformed(btn);
|
||||
GuiNpcButton button = (GuiNpcButton) btn;
|
||||
if(button.id == 0){
|
||||
int index = getCurrentEntityIndex();
|
||||
if(!prev.enabled)
|
||||
return;
|
||||
index--;
|
||||
try{
|
||||
if(index < 0){
|
||||
playerdata.setEntityClass(null);
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
else{
|
||||
playerdata.setEntityClass(data.get(list.get(index)));
|
||||
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
if(entity != null){
|
||||
RendererLivingEntity render = (RendererLivingEntity) RenderManager.instance.getEntityRenderObject(entity);
|
||||
npc.display.texture = NPCRendererHelper.getTexture(render,entity);
|
||||
}
|
||||
}
|
||||
//npc.display.glowTexture = "";
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton btn) {
|
||||
super.actionPerformed(btn);
|
||||
GuiNpcButton button = (GuiNpcButton) btn;
|
||||
if(button.id == 0){
|
||||
int index = getCurrentEntityIndex();
|
||||
if(!prev.enabled)
|
||||
return;
|
||||
index--;
|
||||
try{
|
||||
if(index < 0){
|
||||
playerdata.setEntityClass(null);
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
else{
|
||||
playerdata.setEntityClass(data.get(list.get(index)));
|
||||
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
if(entity != null){
|
||||
RendererLivingEntity render = (RendererLivingEntity) RenderManager.instance.getEntityRenderObject(entity);
|
||||
npc.display.texture = NPCRendererHelper.getTexture(render,entity);
|
||||
}
|
||||
}
|
||||
//npc.display.glowTexture = "";
|
||||
npc.display.skinOverlayData.overlayList.remove(0);
|
||||
npc.textureLocation = null;
|
||||
npc.updateHitbox();
|
||||
}
|
||||
catch(Exception ex){
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
initGui();
|
||||
}
|
||||
if(button.id == 2){
|
||||
int index = getCurrentEntityIndex();
|
||||
if(!next.enabled)
|
||||
return;
|
||||
index++;
|
||||
playerdata.setEntityClass(data.get(list.get(index)));
|
||||
}
|
||||
catch(Exception ex){
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
initGui();
|
||||
}
|
||||
if(button.id == 2){
|
||||
int index = getCurrentEntityIndex();
|
||||
if(!next.enabled)
|
||||
return;
|
||||
index++;
|
||||
playerdata.setEntityClass(data.get(list.get(index)));
|
||||
|
||||
updateTexture();
|
||||
|
||||
initGui();
|
||||
}
|
||||
|
||||
if(button.id == 1){
|
||||
this.mc.displayGuiScreen(new GuiEntitySelection(this, playerdata, npc));
|
||||
}
|
||||
updateTexture();
|
||||
|
||||
if(button.id == 4){
|
||||
this.mc.displayGuiScreen(new GuiModelHead(this, npc));
|
||||
}
|
||||
if(button.id == 5){
|
||||
this.mc.displayGuiScreen(new GuiModelBody(this, npc));
|
||||
}
|
||||
if(button.id == 6){
|
||||
this.mc.displayGuiScreen(new GuiModelArms(this, npc));
|
||||
}
|
||||
if(button.id == 7){
|
||||
this.mc.displayGuiScreen(new GuiModelLegs(this, npc));
|
||||
}
|
||||
initGui();
|
||||
}
|
||||
|
||||
// New Button for Changing Models
|
||||
if(button.id == 1){
|
||||
this.mc.displayGuiScreen(new GuiEntitySelection(this, playerdata, npc));
|
||||
}
|
||||
|
||||
if(button.id == 4){
|
||||
this.mc.displayGuiScreen(new GuiModelHead(this, npc));
|
||||
}
|
||||
if(button.id == 5){
|
||||
this.mc.displayGuiScreen(new GuiModelBody(this, npc));
|
||||
}
|
||||
if(button.id == 6){
|
||||
this.mc.displayGuiScreen(new GuiModelArms(this, npc));
|
||||
}
|
||||
if(button.id == 7){
|
||||
this.mc.displayGuiScreen(new GuiModelLegs(this, npc));
|
||||
}
|
||||
|
||||
// New Button for Changing Models
|
||||
// URL Swapper
|
||||
if(button.id == 250){
|
||||
if(npc.display.modelType == 0){
|
||||
@@ -288,75 +288,75 @@ public class GuiCreationScreen extends GuiModelInterface implements ICustomScrol
|
||||
npc.textureLocation = null;
|
||||
}
|
||||
|
||||
if(button.id == 8){
|
||||
this.mc.displayGuiScreen(new GuiModelScale(this, playerdata, npc));
|
||||
}
|
||||
if(button.id == 30){
|
||||
playerdata.extra.setInteger("Age",button.getValue() == 1?-24000:0);
|
||||
playerdata.clearEntity();
|
||||
}
|
||||
|
||||
if(button.id == 44){
|
||||
this.mc.displayGuiScreen(new GuiPresetSave(this, playerdata));
|
||||
}
|
||||
if(button.id == 8){
|
||||
this.mc.displayGuiScreen(new GuiModelScale(this, playerdata, npc));
|
||||
}
|
||||
if(button.id == 30){
|
||||
playerdata.extra.setInteger("Age",button.getValue() == 1?-24000:0);
|
||||
playerdata.clearEntity();
|
||||
}
|
||||
|
||||
if(button.id == 45){
|
||||
this.mc.displayGuiScreen(new GuiPresetSelection(this, playerdata));
|
||||
}
|
||||
if(button.id >= 100 && button.id < 200){
|
||||
String name = mapped.get(button.id - 100);
|
||||
if(name != null){
|
||||
playerdata.extra.setBoolean(name, button.getValue() == 1);
|
||||
playerdata.clearEntity();
|
||||
}
|
||||
}
|
||||
if(button.id == 201){
|
||||
if(button.id == 44){
|
||||
this.mc.displayGuiScreen(new GuiPresetSave(this, playerdata));
|
||||
}
|
||||
|
||||
if(button.id == 45){
|
||||
this.mc.displayGuiScreen(new GuiPresetSelection(this, playerdata));
|
||||
}
|
||||
if(button.id >= 100 && button.id < 200){
|
||||
String name = mapped.get(button.id - 100);
|
||||
if(name != null){
|
||||
playerdata.extra.setBoolean(name, button.getValue() == 1);
|
||||
playerdata.clearEntity();
|
||||
}
|
||||
}
|
||||
if(button.id == 201){
|
||||
try {
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
Method method = entity.getClass().getMethod("setBreedID", int.class);
|
||||
method.invoke(entity, ((GuiNpcButton)button).getValue());
|
||||
NBTTagCompound comp = new NBTTagCompound();
|
||||
entity.writeEntityToNBT(comp);
|
||||
playerdata.extra.setString("EntityData21", comp.getString("EntityData21"));
|
||||
playerdata.clearEntity();
|
||||
updateTexture();
|
||||
playerdata.clearEntity();
|
||||
updateTexture();
|
||||
} catch (Exception e) {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTexture(){
|
||||
try{
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
if(entity != null){
|
||||
RendererLivingEntity render = (RendererLivingEntity) RenderManager.instance.getEntityRenderObject(entity);
|
||||
npc.display.texture = NPCRendererHelper.getTexture(render,entity);
|
||||
}
|
||||
else{
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
//npc.display.glowTexture = "";
|
||||
npc.display.skinOverlayData.overlayList.remove(0);
|
||||
npc.textureLocation = null;
|
||||
npc.updateHitbox();
|
||||
}
|
||||
catch(Exception ex){
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(){
|
||||
Client.sendData(EnumPacketServer.ModelDataSave, playerdata.writeToNBT());
|
||||
displayGuiScreen(parent);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTexture(){
|
||||
try{
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
if(entity != null){
|
||||
RendererLivingEntity render = (RendererLivingEntity) RenderManager.instance.getEntityRenderObject(entity);
|
||||
npc.display.texture = NPCRendererHelper.getTexture(render,entity);
|
||||
}
|
||||
else{
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
//npc.display.glowTexture = "";
|
||||
npc.display.skinOverlayData.overlayList.remove(0);
|
||||
npc.textureLocation = null;
|
||||
npc.updateHitbox();
|
||||
}
|
||||
catch(Exception ex){
|
||||
npc.display.texture = "customnpcs:textures/entity/humanmale/Steve.png";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(){
|
||||
Client.sendData(EnumPacketServer.ModelDataSave, playerdata.writeToNBT());
|
||||
displayGuiScreen(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customScrollClicked(int i, int j, int k, GuiCustomScroll scroll) {
|
||||
playerdata.clearEntity();
|
||||
playerdata.extra.setString("Name", scroll.getSelected());
|
||||
|
||||
|
||||
EntityLivingBase entity = playerdata.getEntity(npc);
|
||||
RendererLivingEntity render = (RendererLivingEntity) RenderManager.instance.getEntityRenderObject(entity);
|
||||
npc.display.texture = NPCRendererHelper.getTexture(render, entity);
|
||||
|
||||
@@ -119,7 +119,7 @@ public class GuiNPCTrader extends GuiContainerNPCInterface{
|
||||
}
|
||||
else if (!container.isSlotEnabled(slot, player)) {
|
||||
String title = StatCollector.translateToLocal("trader.slotdisabled");
|
||||
this.fontRendererObj.drawString(title, (xSize - fontRendererObj.getStringWidth(title))/2, 131, 0x00DD00);
|
||||
this.fontRendererObj.drawString(title, (xSize - fontRendererObj.getStringWidth(title))/2, 131, 0xFF4000 );
|
||||
}
|
||||
else{
|
||||
String title = StatCollector.translateToLocal("trader.sufficient");
|
||||
|
||||
@@ -260,22 +260,22 @@ public class RenderNPCInterface extends RenderLiving{
|
||||
GL11.glDepthMask(!npc.isInvisible());
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
||||
GL11.glLoadIdentity();
|
||||
GL11.glTranslatef(npc.display.overlayRenderTicks * 0.001F * overlayData.getSpeedX(), npc.display.overlayRenderTicks * 0.001F * overlayData.getSpeedY(), 0.0F);
|
||||
GL11.glScalef(overlayData.getScaleX(), overlayData.getScaleY(), 1.0F);
|
||||
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
||||
GL11.glLoadIdentity();
|
||||
GL11.glTranslatef(npc.display.overlayRenderTicks * 0.001F * overlayData.getSpeedX(), npc.display.overlayRenderTicks * 0.001F * overlayData.getSpeedY(), 0.0F);
|
||||
GL11.glScalef(overlayData.getScaleX(), overlayData.getScaleY(), 1.0F);
|
||||
|
||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||
float scale = 1.005f * overlayData.getSize();
|
||||
GL11.glTranslatef(overlayData.getOffsetX(), overlayData.getOffsetY(), overlayData.getOffsetZ());
|
||||
GL11.glScalef(scale, scale, scale);
|
||||
if(mainModel instanceof ModelMPM){
|
||||
((ModelMPM)mainModel).isArmor = true;
|
||||
mainModel.render(entityliving, par2, par3, par4, par5, par6, par7);
|
||||
((ModelMPM)mainModel).isArmor = false;
|
||||
}
|
||||
else
|
||||
mainModel.render(entityliving, par2, par3, par4, par5, par6, par7);
|
||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||
float scale = 1.005f * overlayData.getSize();
|
||||
GL11.glTranslatef(overlayData.getOffsetX(), overlayData.getOffsetY(), overlayData.getOffsetZ());
|
||||
GL11.glScalef(scale, scale, scale);
|
||||
if(mainModel instanceof ModelMPM){
|
||||
((ModelMPM)mainModel).isArmor = true;
|
||||
mainModel.render(entityliving, par2, par3, par4, par5, par6, par7);
|
||||
((ModelMPM)mainModel).isArmor = false;
|
||||
}
|
||||
else
|
||||
mainModel.render(entityliving, par2, par3, par4, par5, par6, par7);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
||||
|
||||
@@ -68,12 +68,12 @@ public class ContainerNPCTrader extends ContainerNpcInterface{
|
||||
NoppesUtilPlayer.consumeItem(entityplayer, role.inventoryCurrency.getStackInSlot(i + 18), role.ignoreDamage, role.ignoreNBT);
|
||||
ItemStack soldItem = item.copy();
|
||||
givePlayer(soldItem, entityplayer);
|
||||
role.addPurchase(i, entityplayer);
|
||||
role.addPurchase(i, entityplayer.getDisplayName());
|
||||
return soldItem;
|
||||
|
||||
}
|
||||
public boolean isSlotEnabled(int slot, EntityPlayer player) {
|
||||
return role.isSlotEnabled(slot, player);
|
||||
return role.isSlotEnabled(slot, player.getDisplayName());
|
||||
}
|
||||
public boolean canBuy(int slot, EntityPlayer player) {
|
||||
ItemStack currency = role.inventoryCurrency.getStackInSlot(slot);
|
||||
|
||||
@@ -99,7 +99,7 @@ public class DataTimers implements ITimers {
|
||||
DataTimers.Timer timer = (DataTimers.Timer)var3.next();
|
||||
NBTTagCompound c = new NBTTagCompound();
|
||||
c.setInteger("ID", timer.id);
|
||||
c.setInteger("TimerTicks", timer.id);
|
||||
c.setInteger("TimerTicks", timer.timerTicks);
|
||||
c.setBoolean("Repeat", timer.repeat);
|
||||
c.setInteger("Ticks", timer.ticks);
|
||||
list.appendTag(c);
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package noppes.npcs.items;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import net.minecraft.entity.passive.EntityVillager;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -13,11 +15,12 @@ import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.constants.EnumRoleType;
|
||||
import noppes.npcs.controllers.PlayerDataController;
|
||||
import noppes.npcs.controllers.ServerCloneController;
|
||||
import noppes.npcs.controllers.data.PlayerData;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.RoleCompanion;
|
||||
import noppes.npcs.roles.RoleFollower;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
public class ItemSoulstoneEmpty extends Item {
|
||||
public ItemSoulstoneEmpty(){
|
||||
@@ -75,21 +78,29 @@ public class ItemSoulstoneEmpty extends Item {
|
||||
return true;
|
||||
if(entity instanceof EntityNPCInterface){
|
||||
EntityNPCInterface npc = (EntityNPCInterface) entity;
|
||||
if(npc.advanced.role == EnumRoleType.Companion){
|
||||
if (npc.advanced.refuseSoulStone) return false;
|
||||
if (CustomNpcs.SoulStoneFriendlyNPCs && npc.getFaction() != null) {
|
||||
int p = npc.advanced.minFactionPointsToSoulStone;
|
||||
if (p == -1 && npc.getFaction().isFriendlyToPlayer(player)) return true;
|
||||
else if (p != -1) {
|
||||
PlayerData data = PlayerDataController.instance.getPlayerData(player);
|
||||
return data.factionData.getFactionPoints(npc.getFaction().getId()) >= p;
|
||||
}
|
||||
}
|
||||
if (npc.advanced.role == EnumRoleType.Companion){
|
||||
RoleCompanion role = (RoleCompanion) npc.roleInterface;
|
||||
if(role.getOwner() == player)
|
||||
return true;
|
||||
}
|
||||
if(npc.advanced.role == EnumRoleType.Follower){
|
||||
if (npc.advanced.role == EnumRoleType.Follower){
|
||||
RoleFollower role = (RoleFollower) npc.roleInterface;
|
||||
if(role.getOwner() == player)
|
||||
return !role.refuseSoulStone;
|
||||
}
|
||||
return CustomNpcs.SoulStoneNPCs;
|
||||
}
|
||||
if(entity instanceof EntityAnimal)
|
||||
return CustomNpcs.SoulStoneAnimals;
|
||||
|
||||
if (entity instanceof EntityAnimal) return CustomNpcs.SoulStoneAnimals;
|
||||
if (entity instanceof EntityVillager) return CustomNpcs.SoulStoneVillagers;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,8 @@ public class ItemSoulstoneFilled extends Item {
|
||||
npc.ai.startPos = new int[]{x, y, z};
|
||||
npc.setHealth(npc.getMaxHealth());
|
||||
npc.setPosition((float)x + 0.5F, npc.getStartYPos(), (float)z + 0.5F);
|
||||
|
||||
npc.advanced.soulStonePlayerName = player.getDisplayName();
|
||||
npc.advanced.soulStoneInit = true;
|
||||
if(npc.advanced.role == EnumRoleType.Companion && player != null){
|
||||
PlayerData data = PlayerDataController.instance.getPlayerData(player);
|
||||
if(data.hasCompanion())
|
||||
|
||||
@@ -118,23 +118,21 @@ public class RoleTrader extends RoleInterface{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void addPurchase(int slot, EntityPlayer player) {
|
||||
public void addPurchase(int slot, String playerName) {
|
||||
if(slot >= 18 || slot < 0) return;
|
||||
++purchases[slot];
|
||||
++getArrayByName(player.getDisplayName(), playerPurchases)[slot];
|
||||
++getArrayByName(playerName, playerPurchases)[slot];
|
||||
}
|
||||
|
||||
public boolean isSlotEnabled(int slot, EntityPlayer player) {
|
||||
public boolean isSlotEnabled(int slot, String playerName) {
|
||||
if(slot >= 18 || slot < 0) return false;
|
||||
if (disableSlot[slot] > 0) return false;
|
||||
if (getArrayByName(player.getDisplayName(), playerDisableSlot)[slot] > 0) return false;
|
||||
return true;
|
||||
return getArrayByName(playerName, playerDisableSlot)[slot] <= 0;
|
||||
}
|
||||
|
||||
public int[] getArrayByName(String name, HashMap<String, int[]> map) {
|
||||
int[] a = map.get(name);
|
||||
if (a == null) a = map.put(name, new int[18]);
|
||||
return a;
|
||||
map.computeIfAbsent(name, k -> new int[18]);
|
||||
return map.get(name);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +1,29 @@
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.constants.*;
|
||||
import noppes.npcs.constants.EnumAnimation;
|
||||
import noppes.npcs.constants.EnumJobType;
|
||||
import noppes.npcs.constants.EnumNavType;
|
||||
import noppes.npcs.constants.EnumRoleType;
|
||||
import noppes.npcs.constants.EnumStandingType;
|
||||
import noppes.npcs.controllers.data.Line;
|
||||
import noppes.npcs.entity.EntityCustomNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.ScriptFaction;
|
||||
import noppes.npcs.scripted.constants.AnimationType;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.scripted.interfaces.entity.ICustomNpc;
|
||||
import noppes.npcs.scripted.interfaces.entity.IEntityLivingBase;
|
||||
import noppes.npcs.scripted.interfaces.entity.IPlayer;
|
||||
import noppes.npcs.scripted.interfaces.handler.IOverlayHandler;
|
||||
import noppes.npcs.scripted.interfaces.item.IItemStack;
|
||||
import noppes.npcs.scripted.constants.AnimationType;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.entity.ICustomNpc;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.scripted.roles.ScriptJobBard;
|
||||
import noppes.npcs.scripted.roles.ScriptJobConversation;
|
||||
import noppes.npcs.scripted.roles.ScriptJobFollower;
|
||||
@@ -31,12 +39,8 @@ import noppes.npcs.scripted.roles.ScriptRoleInterface;
|
||||
import noppes.npcs.scripted.roles.ScriptRoleMailman;
|
||||
import noppes.npcs.scripted.roles.ScriptRoleTrader;
|
||||
import noppes.npcs.scripted.roles.ScriptRoleTransporter;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.util.ValueUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ScriptNpc<T extends EntityNPCInterface> extends ScriptLiving<T> implements ICustomNpc {
|
||||
public EntityNPCInterface npc;
|
||||
|
||||
@@ -862,6 +866,34 @@ public class ScriptNpc<T extends EntityNPCInterface> extends ScriptLiving<T> imp
|
||||
npc.stats.canDespawn = canDespawn;
|
||||
npc.stats.playerSetCanDespawn = canDespawn;
|
||||
}
|
||||
|
||||
public boolean spawnedFromSoulStone() {
|
||||
return !npc.advanced.soulStonePlayerName.equals("");
|
||||
}
|
||||
|
||||
public String getSoulStonePlayerName() {
|
||||
return npc.advanced.soulStonePlayerName;
|
||||
}
|
||||
|
||||
public boolean getRefuseSoulStone() {
|
||||
return npc.advanced.refuseSoulStone;
|
||||
}
|
||||
|
||||
public void setRefuseSoulStone(boolean refuse) {
|
||||
npc.advanced.refuseSoulStone = refuse;
|
||||
}
|
||||
|
||||
public boolean isSoulStoneInit() {
|
||||
return npc.advanced.soulStoneInit;
|
||||
}
|
||||
|
||||
public int getMinPointsToSoulStone() {
|
||||
return npc.advanced.minFactionPointsToSoulStone;
|
||||
}
|
||||
|
||||
public void setMinPointsToSoulStone(int points) {
|
||||
npc.advanced.minFactionPointsToSoulStone = points;
|
||||
}
|
||||
|
||||
public void giveItem(IPlayer player, IItemStack item){
|
||||
npc.givePlayerItem((EntityPlayer) player.getMCEntity(), item.getMCItemStack());
|
||||
|
||||
@@ -278,6 +278,40 @@ public class ScriptPlayer<T extends EntityPlayerMP> extends ScriptLivingBase<T>
|
||||
chat.setChatStyle(style);
|
||||
player.addChatMessage(chat);
|
||||
}
|
||||
|
||||
public void sendMessage(String message, String color, boolean bold, boolean italic, boolean underlined) {
|
||||
EnumChatFormatting c = getColor(color);
|
||||
if (c == null) return;
|
||||
sendMessage(message, c, bold, italic, underlined);
|
||||
}
|
||||
|
||||
public void sendMessage(String message, String color, boolean bold, boolean italic, boolean obfuscated, boolean strikethrough, boolean underlined) {
|
||||
EnumChatFormatting c = getColor(color);
|
||||
if (c == null) return;
|
||||
sendMessage(message, c, bold, italic, obfuscated, strikethrough, underlined);
|
||||
}
|
||||
|
||||
private EnumChatFormatting getColor(String color) {
|
||||
switch (color) {
|
||||
case "black": return EnumChatFormatting.BLACK;
|
||||
case "dark_blue": return EnumChatFormatting.DARK_BLUE;
|
||||
case "dark_green": return EnumChatFormatting.DARK_GREEN;
|
||||
case "dark_aqua": return EnumChatFormatting.DARK_AQUA;
|
||||
case "dark_red": return EnumChatFormatting.DARK_RED;
|
||||
case "dark_purple": return EnumChatFormatting.DARK_PURPLE;
|
||||
case "gold": return EnumChatFormatting.GOLD;
|
||||
case "gray": return EnumChatFormatting.GRAY;
|
||||
case "dark_gray": return EnumChatFormatting.DARK_GRAY;
|
||||
case "blue": return EnumChatFormatting.BLUE;
|
||||
case "green": return EnumChatFormatting.GREEN;
|
||||
case "aqua": return EnumChatFormatting.AQUA;
|
||||
case "red": return EnumChatFormatting.RED;
|
||||
case "light_purple": return EnumChatFormatting.LIGHT_PURPLE;
|
||||
case "yellow": return EnumChatFormatting.YELLOW;
|
||||
case "white": return EnumChatFormatting.WHITE;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Return gamemode. 0: Survival, 1: Creative, 2: Adventure
|
||||
|
||||
@@ -7,11 +7,11 @@ package noppes.npcs.scripted.interfaces.entity;
|
||||
|
||||
import net.minecraft.entity.EntityCreature;
|
||||
import noppes.npcs.scripted.ScriptFaction;
|
||||
import noppes.npcs.scripted.interfaces.ISkinOverlay;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.scripted.interfaces.handler.IOverlayHandler;
|
||||
import noppes.npcs.scripted.interfaces.item.IItemStack;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.scripted.roles.*;
|
||||
import noppes.npcs.scripted.roles.ScriptJobInterface;
|
||||
import noppes.npcs.scripted.roles.ScriptRoleInterface;
|
||||
|
||||
public interface ICustomNpc<T extends EntityCreature> extends IEntityLiving<T> {
|
||||
/**
|
||||
@@ -623,7 +623,48 @@ public interface ICustomNpc<T extends EntityCreature> extends IEntityLiving<T> {
|
||||
* @param canDespawn True if the NPC should naturally despawn. False otherwise.
|
||||
*/
|
||||
void setNaturallyDespawns(boolean canDespawn);
|
||||
|
||||
|
||||
/**
|
||||
* @return true if this npc was spawned by a player using soulstone
|
||||
*/
|
||||
boolean spawnedFromSoulStone();
|
||||
|
||||
/**
|
||||
* @return the name of the player who spawned this npc using soulstone. null if not spawned by soulstone
|
||||
*/
|
||||
String getSoulStonePlayerName();
|
||||
|
||||
/**
|
||||
* @return true if npc was spawned by soul stone. becomes false after the init function is called.
|
||||
*/
|
||||
boolean isSoulStoneInit();
|
||||
|
||||
/**
|
||||
* @return does this npc refuse to be taken by soul stone
|
||||
*/
|
||||
boolean getRefuseSoulStone();
|
||||
|
||||
/**
|
||||
* @param refuse set if this npc refuses to be taken by soul stone
|
||||
*/
|
||||
void setRefuseSoulStone(boolean refuse);
|
||||
|
||||
/**
|
||||
* requires SoulStoneFriendlyNPCs in config to be true
|
||||
* -1 by default
|
||||
* if -1, the minimum points are the faction's friendly points
|
||||
* @return the minimum faction points needed to soulstone this npc
|
||||
*/
|
||||
int getMinPointsToSoulStone();
|
||||
|
||||
/**
|
||||
* requires SoulStoneFriendlyNPCs in config to be true
|
||||
* -1 by default
|
||||
* if -1, the minimum points are the faction's friendly points
|
||||
* @param points the minimum faction points needed to soulstone this npc
|
||||
*/
|
||||
void setMinPointsToSoulStone(int points);
|
||||
|
||||
/**
|
||||
* @param player The player to give the item to
|
||||
* @param item The item given to the player
|
||||
|
||||
@@ -100,6 +100,10 @@ public interface IPlayer<T extends EntityPlayerMP> extends IEntityLivingBase<T>
|
||||
void sendMessage(String message, EnumChatFormatting color, boolean bold, boolean italic, boolean underlined);
|
||||
|
||||
void sendMessage(String message, EnumChatFormatting color, boolean bold, boolean italic, boolean obfuscated, boolean strikethrough, boolean underlined);
|
||||
|
||||
void sendMessage(String message, String color, boolean bold, boolean italic, boolean underlined);
|
||||
|
||||
void sendMessage(String message, String color, boolean bold, boolean italic, boolean obfuscated, boolean strikethrough, boolean underlined);
|
||||
|
||||
/**
|
||||
* @return Return gamemode. 0: Survival, 1: Creative, 2: Adventure
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package noppes.npcs.scripted.roles;
|
||||
|
||||
import foxz.utils.Market;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.RoleTrader;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
@@ -105,7 +104,7 @@ public class ScriptRoleTrader extends ScriptRoleInterface implements IRoleTrader
|
||||
|
||||
public boolean isSlotEnabled(int slot, IPlayer player) {
|
||||
if(slot >= 18 || slot < 0) return false;
|
||||
return role.isSlotEnabled(slot, (EntityPlayer)player.getMCEntity());
|
||||
return role.isSlotEnabled(slot, player.getDisplayName());
|
||||
}
|
||||
|
||||
public void disableSlot(int slot) {
|
||||
|
||||
Reference in new issue
Block a user