Natural Spawn Entries:

-Added GUI options for new natural spawn attributes.
-Added 4 more entity options
-Fixed natural spawning not working at night
This commit is contained in:
Luis C.M committed 2022-06-29 14:21:55 -05:00
1 parent 55b21de050
commit dd700c677b
5 files changed
+221 -17

No files matched your search

@@ -0,0 +1,76 @@
package noppes.npcs.client.gui;
import net.minecraft.client.gui.GuiButton;
import noppes.npcs.client.gui.util.*;
import noppes.npcs.controllers.data.SpawnData;
public class SubGuiSpawningOptions extends SubGuiInterface implements ITextfieldListener {
private SpawnData data;
public SubGuiSpawningOptions(SpawnData data){
this.data = data;
setBackground("menubg.png");
xSize = 216;
ySize = 216;
closeOnEsc = true;
}
public void initGui() {
super.initGui();
int y = guiTop - 15;
addButton(new GuiNpcButtonYesNo(10, guiLeft + 120, y += 22, data.animalSpawning));
addLabel(new GuiNpcLabel(10, "spawning.animalSpawning", guiLeft + 4, y + 5));
addButton(new GuiNpcButtonYesNo(11, guiLeft + 120, y += 22, data.monsterSpawning));
addLabel(new GuiNpcLabel(11, "spawning.monsterSpawning", guiLeft + 4, y + 5));
addButton(new GuiNpcButtonYesNo(12, guiLeft + 120, y += 22, data.liquidSpawning));
addLabel(new GuiNpcLabel(12, "spawning.liquidSpawning", guiLeft + 4, y + 5));
addButton(new GuiNpcButtonYesNo(13, guiLeft + 120, y += 22, data.airSpawning));
addLabel(new GuiNpcLabel(13, "spawning.airSpawning", guiLeft + 4, y + 5));
addTextField(new GuiNpcTextField(14, this, guiLeft + 120, y += 22, 40, 20, String.valueOf(data.spawnHeightMin)));
addLabel(new GuiNpcLabel(14, "spawning.minHeight", guiLeft + 4, y + 5));
addTextField(new GuiNpcTextField(15, this, guiLeft + 120, y += 22, 40, 20, String.valueOf(data.spawnHeightMax)));
addLabel(new GuiNpcLabel(15, "spawning.maxHeight", guiLeft + 4, y + 5));
getTextField(14).integersOnly = true;
getTextField(14).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0);
getTextField(15).integersOnly = true;
getTextField(15).setMinMaxDefault(-Integer.MAX_VALUE, Integer.MAX_VALUE, 0);
addButton(new GuiNpcButton(100, guiLeft + 154, guiTop + 192, 60, 20, "gui.done"));
}
@Override
protected void actionPerformed(GuiButton guibutton) {
GuiNpcButton button = (GuiNpcButton) guibutton;
if (button.id == 10) {
data.animalSpawning = button.getValue() == 1;
}
if (button.id == 11) {
data.monsterSpawning = button.getValue() == 1;
}
if (button.id == 12) {
data.liquidSpawning = button.getValue() == 1;
}
if (button.id == 13) {
data.airSpawning = button.getValue() == 1;
}
if (button.id == 100) {
close();
}
}
@Override
public void unFocused(GuiNpcTextField textfield) {
if (textfield.id == 14) {
data.spawnHeightMin = textfield.getInteger();
}
if (textfield.id == 15) {
data.spawnHeightMax = textfield.getInteger();
}
}
}
@@ -9,6 +9,7 @@ import net.minecraft.util.StatCollector;
import noppes.npcs.client.Client;
import noppes.npcs.client.gui.GuiNpcMobSpawnerSelector;
import noppes.npcs.client.gui.SubGuiNpcBiomes;
import noppes.npcs.client.gui.SubGuiSpawningOptions;
import noppes.npcs.client.gui.util.GuiCustomScroll;
import noppes.npcs.client.gui.util.GuiNPCInterface2;
import noppes.npcs.client.gui.util.GuiNpcButton;
@@ -31,6 +32,7 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I
private HashMap<String, Integer> data = new HashMap<String, Integer>();
private SpawnData spawn = new SpawnData();
private int slotSelected;
public GuiNpcNaturalSpawns(EntityNPCInterface npc) {
super(npc);
@@ -60,15 +62,34 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I
addLabel(new GuiNpcLabel(1,"gui.title", guiLeft + 4, guiTop + 8));
addTextField(new GuiNpcTextField(1, this, this.fontRendererObj, guiLeft + 60, guiTop + 3, 140, 20, spawn.name));
addLabel(new GuiNpcLabel(3,"spawning.biomes", guiLeft + 4, guiTop + 30));
addButton(new GuiNpcButton(3, guiLeft + 120, guiTop + 25, 50, 20, "selectServer.edit"));
int y = guiTop + 30;
addLabel(new GuiNpcLabel(3,"spawning.biomes", guiLeft + 4, y));
addButton(new GuiNpcButton(3, guiLeft + 120, y - 5, 50, 20, "selectServer.edit"));
addSlider(new GuiNpcSlider(this, 4, guiLeft + 4, guiTop + 47, 180, 20, (float)spawn.itemWeight / 100));
addLabel(new GuiNpcLabel(4,"spawning.options", guiLeft + 4, y += 22));
addButton(new GuiNpcButton(4, guiLeft + 120, y - 5, 50, 20, "selectServer.edit"));
int y = guiTop + 70;
this.addButton(new GuiNpcButton(25, guiLeft + 14, y,20,20, "X"));
addLabel(new GuiNpcLabel(5, "1:", guiLeft + 4, y + 5));
this.addButton(new GuiNpcButton(5, guiLeft + 36, y, 170, 20, getTitle(spawn.compound1)));
addSlider(new GuiNpcSlider(this, 5, guiLeft + 4, y += 17, 180, 20, (float)spawn.itemWeight / 100));
this.addButton(new GuiNpcButton(25, guiLeft + 14, y += 23,20,20, "X"));
addLabel(new GuiNpcLabel(6, "1:", guiLeft + 4, y + 5));
this.addButton(new GuiNpcButton(6, guiLeft + 36, y, 170, 20, getTitle(spawn.compound1)));
this.addButton(new GuiNpcButton(26, guiLeft + 14, y += 22,20,20, "X"));
addLabel(new GuiNpcLabel(7, "2:", guiLeft + 4, y + 5));
this.addButton(new GuiNpcButton(7, guiLeft + 36, y, 170, 20, getTitle(spawn.compound2)));
this.addButton(new GuiNpcButton(27, guiLeft + 14, y += 22,20,20, "X"));
addLabel(new GuiNpcLabel(8, "3:", guiLeft + 4, y + 5));
this.addButton(new GuiNpcButton(8, guiLeft + 36, y, 170, 20, getTitle(spawn.compound3)));
this.addButton(new GuiNpcButton(28, guiLeft + 14, y += 22,20,20, "X"));
addLabel(new GuiNpcLabel(9, "4:", guiLeft + 4, y + 5));
this.addButton(new GuiNpcButton(9, guiLeft + 36, y, 170, 20, getTitle(spawn.compound4)));
this.addButton(new GuiNpcButton(29, guiLeft + 14, y += 22,20,20, "X"));
addLabel(new GuiNpcLabel(10, "5:", guiLeft + 4, y + 5));
this.addButton(new GuiNpcButton(10, guiLeft + 36, y, 170, 20, getTitle(spawn.compound5)));
}
private String getTitle(NBTTagCompound compound) {
if(compound != null && compound.hasKey("ClonedName"))
@@ -101,13 +122,35 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I
if(id == 3){
setSubGui(new SubGuiNpcBiomes(spawn));
}
if(id == 5){
if(id == 4){
setSubGui(new SubGuiSpawningOptions(spawn));
}
if(id >= 6 && id <= 10){
slotSelected = id - 5;
setSubGui(new GuiNpcMobSpawnerSelector());
}
if(id == 25){
spawn.compound1 = new NBTTagCompound();
initGui();
}
if(id == 26){
spawn.compound2 = new NBTTagCompound();
initGui();
}
if(id == 27){
spawn.compound3 = new NBTTagCompound();
initGui();
}
if(id == 28){
spawn.compound4 = new NBTTagCompound();
initGui();
}
if(id == 29){
spawn.compound5 = new NBTTagCompound();
initGui();
}
}
@@ -164,8 +207,25 @@ public class GuiNpcNaturalSpawns extends GuiNPCInterface2 implements IGuiData, I
if(gui instanceof GuiNpcMobSpawnerSelector){
GuiNpcMobSpawnerSelector selector = (GuiNpcMobSpawnerSelector) gui;
NBTTagCompound compound = selector.getCompound();
if(compound != null)
spawn.compound1 = compound;
if (compound != null) {
switch (slotSelected) {
case 1:
spawn.compound1 = compound;
break;
case 2:
spawn.compound2 = compound;
break;
case 3:
spawn.compound3 = compound;
break;
case 4:
spawn.compound4 = compound;
break;
case 5:
spawn.compound5 = compound;
break;
}
}
initGui();
}
}
@@ -21,6 +21,10 @@ public class SpawnData extends WeightedRandom.Item implements INaturalSpawn {
public int id = -1;
public String name = "";
public NBTTagCompound compound1 = new NBTTagCompound();
public NBTTagCompound compound2 = new NBTTagCompound();
public NBTTagCompound compound3 = new NBTTagCompound();
public NBTTagCompound compound4 = new NBTTagCompound();
public NBTTagCompound compound5 = new NBTTagCompound();
public boolean animalSpawning = true;
public boolean monsterSpawning = false;
@@ -43,6 +47,10 @@ public class SpawnData extends WeightedRandom.Item implements INaturalSpawn {
biomes = NBTTags.getStringList(compound.getTagList("SpawnBiomes", 10));
compound1 = compound.getCompoundTag("SpawnCompound1");
compound2 = compound.getCompoundTag("SpawnCompound2");
compound3 = compound.getCompoundTag("SpawnCompound3");
compound4 = compound.getCompoundTag("SpawnCompound4");
compound5 = compound.getCompoundTag("SpawnCompound5");
animalSpawning = compound.getBoolean("AnimalSpawning");
monsterSpawning = compound.getBoolean("MonsterSpawning");
@@ -64,6 +72,10 @@ public class SpawnData extends WeightedRandom.Item implements INaturalSpawn {
compound.setTag("SpawnBiomes", NBTTags.nbtStringList(biomes));
compound.setTag("SpawnCompound1", compound1);
compound.setTag("SpawnCompound2", compound2);
compound.setTag("SpawnCompound3", compound3);
compound.setTag("SpawnCompound4", compound4);
compound.setTag("SpawnCompound5", compound5);
compound.setBoolean("AnimalSpawning", animalSpawning);
compound.setBoolean("MonsterSpawning", monsterSpawning);
@@ -85,19 +97,68 @@ public class SpawnData extends WeightedRandom.Item implements INaturalSpawn {
return this.name;
}
public void setEntity(IEntity entity) {
public void setEntity(IEntity entity, int slot) {
if (slot < 1)
slot = 1;
if (slot > 5)
slot = 5;
NBTTagCompound compound = new NBTTagCompound();
if (!entity.getMCEntity().writeToNBTOptional(compound)) {
throw new CustomNPCsException("Entity could not be written to NBT");
} else {
ServerCloneController.Instance.cleanTags(compound1);
compound1 = compound;
switch (slot) {
case 1:
ServerCloneController.Instance.cleanTags(compound1);
compound1 = compound;
break;
case 2:
ServerCloneController.Instance.cleanTags(compound2);
compound2 = compound;
break;
case 3:
ServerCloneController.Instance.cleanTags(compound3);
compound3 = compound;
break;
case 4:
ServerCloneController.Instance.cleanTags(compound4);
compound4 = compound;
break;
case 5:
ServerCloneController.Instance.cleanTags(compound5);
compound5 = compound;
break;
}
}
}
public IEntity getEntity(IWorld world) {
public IEntity getEntity(IWorld world, int slot) {
if (slot < 1)
slot = 1;
if (slot > 5)
slot = 5;
try {
Entity entity = EntityList.createEntityFromNBT(compound1, world.getMCWorld());
NBTTagCompound compound = new NBTTagCompound();
switch (slot) {
case 1:
compound = compound1;
break;
case 2:
compound = compound2;
break;
case 3:
compound = compound3;
break;
case 4:
compound = compound4;
break;
case 5:
compound = compound5;
break;
}
Entity entity = EntityList.createEntityFromNBT(compound, world.getMCWorld());
return NpcAPI.Instance().getIEntity(entity);
} catch (Exception e) {
throw new CustomNPCsException("Error creating entity from spawn data:\n" + e.getMessage());
@@ -9,9 +9,9 @@ public interface INaturalSpawn {
String getName();
void setEntity(IEntity entity);
void setEntity(IEntity entity, int slot);
IEntity getEntity(IWorld world);
IEntity getEntity(IWorld world, int slot);
void setWeight(int weight);