Skip to content

Commit eb4b210

Browse files
committedMar 1, 2016
Swarms now properly have lifespan and do work.
1 parent 6cab30f commit eb4b210

File tree

3 files changed

+201
-10
lines changed

3 files changed

+201
-10
lines changed
 

Diff for: ‎src/main/java/pl/asie/computronics/integration/forestry/entity/EntitySwarm.java

+190-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
package pl.asie.computronics.integration.forestry.entity;
22

3+
import com.mojang.authlib.GameProfile;
34
import cpw.mods.fml.relauncher.Side;
45
import cpw.mods.fml.relauncher.SideOnly;
56
import forestry.api.apiculture.BeeManager;
7+
import forestry.api.apiculture.DefaultBeeListener;
8+
import forestry.api.apiculture.DefaultBeeModifier;
9+
import forestry.api.apiculture.IBeeGenome;
10+
import forestry.api.apiculture.IBeeHousing;
11+
import forestry.api.apiculture.IBeeHousingInventory;
12+
import forestry.api.apiculture.IBeeListener;
13+
import forestry.api.apiculture.IBeeModifier;
14+
import forestry.api.apiculture.IBeekeepingLogic;
15+
import forestry.api.core.EnumHumidity;
16+
import forestry.api.core.EnumTemperature;
17+
import forestry.api.core.ForestryAPI;
18+
import forestry.api.core.IErrorLogic;
619
import net.minecraft.block.material.Material;
720
import net.minecraft.entity.Entity;
821
import net.minecraft.entity.EntityLivingBase;
922
import net.minecraft.entity.SharedMonsterAttributes;
1023
import net.minecraft.entity.player.EntityPlayer;
24+
import net.minecraft.item.ItemStack;
1125
import net.minecraft.nbt.NBTTagCompound;
1226
import net.minecraft.potion.PotionEffect;
1327
import net.minecraft.util.ChatComponentTranslation;
28+
import net.minecraft.util.ChunkCoordinates;
1429
import net.minecraft.util.DamageSource;
1530
import net.minecraft.util.IChatComponent;
1631
import net.minecraft.util.MathHelper;
@@ -23,12 +38,13 @@
2338
import pl.asie.computronics.integration.forestry.nanomachines.SwarmProvider;
2439

2540
import java.util.Arrays;
41+
import java.util.Collections;
2642
import java.util.List;
2743

2844
/**
2945
* @author Vexatos
3046
*/
31-
public class EntitySwarm extends EntityFlyingCreature {
47+
public class EntitySwarm extends EntityFlyingCreature implements IBeeHousing {
3248

3349
public static final DamageSource beeDamageSource = new BeeDamageSource("computronics.sting", 5);
3450
public static final DamageSource beeDamageSourceSelf = new BeeDamageSource("computronics.sting.self", 1);
@@ -38,10 +54,13 @@ public class EntitySwarm extends EntityFlyingCreature {
3854
public EntitySwarm(World world) {
3955
super(world);
4056
this.setSize(1.0F, 1.0F);
57+
this.inventory = new SwarmHousingInventory(null);
4158
}
4259

43-
public EntitySwarm(World world, double x, double y, double z) {
44-
this(world);
60+
public EntitySwarm(World world, double x, double y, double z, ItemStack queen) {
61+
super(world);
62+
this.setSize(1.0F, 1.0F);
63+
this.inventory = new SwarmHousingInventory(queen);
4564
this.setPosition(x, y, z);
4665
this.prevPosX = x;
4766
this.prevPosY = y;
@@ -70,6 +89,9 @@ public void onEntityUpdate() {
7089
this.setDead();
7190
}
7291
}
92+
if(beeLogic.canWork()) {
93+
beeLogic.doWork();
94+
}
7395
} else {
7496
/*ArrayList<Entity> toKeep = new ArrayList<Entity>();
7597
for(Entity member : swarmMembers) {
@@ -441,4 +463,169 @@ public Entity getEntity() {
441463
return this.entity;
442464
}*/
443465
}
466+
467+
private final IBeekeepingLogic beeLogic = BeeManager.beeRoot.createBeekeepingLogic(this);
468+
private final IErrorLogic errorLogic = ForestryAPI.errorStateRegistry.createErrorLogic();
469+
private final IBeeHousingInventory inventory;
470+
private final IBeeListener beeListener = new SwarmBeeListener();
471+
472+
@Override
473+
public Iterable<IBeeModifier> getBeeModifiers() {
474+
return Collections.singletonList(SwarmBeeModifier.instance);
475+
}
476+
477+
@Override
478+
public Iterable<IBeeListener> getBeeListeners() {
479+
return Collections.singletonList(beeListener);
480+
}
481+
482+
@Override
483+
public IBeeHousingInventory getBeeInventory() {
484+
return inventory;
485+
}
486+
487+
@Override
488+
public IBeekeepingLogic getBeekeepingLogic() {
489+
return beeLogic;
490+
}
491+
492+
@Override
493+
public EnumTemperature getTemperature() {
494+
return EnumTemperature.getFromBiome(getBiome(), getX(), getY(), getZ());
495+
}
496+
497+
@Override
498+
public EnumHumidity getHumidity() {
499+
return EnumHumidity.getFromValue(getBiome().rainfall);
500+
}
501+
502+
@Override
503+
public int getBlockLightValue() {
504+
return worldObj.getBlockLightValue(getX(), getY(), getZ());
505+
}
506+
507+
@Override
508+
public boolean canBlockSeeTheSky() {
509+
return worldObj.canBlockSeeTheSky(getX(), getY() + 1, getZ());
510+
}
511+
512+
@Override
513+
public World getWorld() {
514+
return worldObj;
515+
}
516+
517+
@Override
518+
public BiomeGenBase getBiome() {
519+
return worldObj.getBiomeGenForCoords(getX(), getZ());
520+
}
521+
522+
@Override
523+
public GameProfile getOwner() {
524+
return player != null ? player.getGameProfile() : null;
525+
}
526+
527+
@Override
528+
public Vec3 getBeeFXCoordinates() {
529+
return Vec3.createVectorHelper(posX, posY + 0.25, posZ);
530+
}
531+
532+
@Override
533+
public IErrorLogic getErrorLogic() {
534+
return errorLogic;
535+
}
536+
537+
@Override
538+
public ChunkCoordinates getCoordinates() {
539+
return new ChunkCoordinates(getX(), getY(), getZ());
540+
}
541+
542+
public int getX() {
543+
return MathHelper.floor_double(posX);
544+
}
545+
546+
public int getY() {
547+
return MathHelper.floor_double(posY);
548+
}
549+
550+
public int getZ() {
551+
return MathHelper.floor_double(posZ);
552+
}
553+
554+
public static class SwarmHousingInventory implements IBeeHousingInventory {
555+
556+
private ItemStack queenStack;
557+
558+
public SwarmHousingInventory(ItemStack queenStack) {
559+
this.queenStack = queenStack;
560+
}
561+
562+
@Override
563+
public ItemStack getQueen() {
564+
return queenStack;
565+
}
566+
567+
@Override
568+
public ItemStack getDrone() {
569+
return null;
570+
}
571+
572+
@Override
573+
public void setQueen(ItemStack stack) {
574+
this.queenStack = stack;
575+
}
576+
577+
@Override
578+
public void setDrone(ItemStack stack) {
579+
// NO-OP
580+
}
581+
582+
@Override
583+
public boolean addProduct(ItemStack product, boolean all) {
584+
return true; // Consume all products without doing anything.
585+
}
586+
}
587+
588+
public class SwarmBeeListener extends DefaultBeeListener {
589+
590+
@Override
591+
public void onQueenDeath() {
592+
super.onQueenDeath();
593+
setDead();
594+
}
595+
}
596+
597+
public static class SwarmBeeModifier extends DefaultBeeModifier {
598+
599+
public static final IBeeModifier instance = new SwarmBeeModifier();
600+
601+
@Override
602+
public float getTerritoryModifier(IBeeGenome genome, float currentModifier) {
603+
return 0.5f;
604+
}
605+
606+
@Override
607+
public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
608+
return 0.0f;
609+
}
610+
611+
@Override
612+
public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
613+
return 1.1f;
614+
}
615+
616+
@Override
617+
public float getProductionModifier(IBeeGenome genome, float currentModifier) {
618+
return 0.0f;
619+
}
620+
621+
@Override
622+
public float getFloweringModifier(IBeeGenome genome, float currentModifier) {
623+
return 0.0f;
624+
}
625+
626+
@Override
627+
public float getGeneticDecay(IBeeGenome genome, float currentModifier) {
628+
return 100f;
629+
}
630+
}
444631
}

Diff for: ‎src/main/java/pl/asie/computronics/integration/forestry/nanomachines/SwarmBehavior.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import li.cil.oc.api.nanomachines.DisableReason;
66
import li.cil.oc.api.prefab.AbstractBehavior;
77
import net.minecraft.entity.player.EntityPlayer;
8+
import net.minecraft.item.ItemStack;
89
import pl.asie.computronics.integration.forestry.entity.EntitySwarm;
910

1011
/**
@@ -46,13 +47,13 @@ public void onDisable(DisableReason reason) {
4647
}
4748
}
4849

49-
public void spawnNewEntity(double x, double y, double z) {
50-
spawnNewEntity(x, y, z, 0xF0F000, true);
50+
public void spawnNewEntity(double x, double y, double z, ItemStack queen) {
51+
spawnNewEntity(x, y, z, 0xF0F000, true, queen);
5152
}
5253

53-
public void spawnNewEntity(double x, double y, double z, int color, boolean tolerant) {
54+
public void spawnNewEntity(double x, double y, double z, int color, boolean tolerant, ItemStack queen) {
5455
if(!player.worldObj.isRemote) {
55-
entity = new EntitySwarm(player.worldObj, x, y, z);
56+
entity = new EntitySwarm(player.worldObj, x, y, z, queen);
5657
//if(entityTag != null) {
5758
// entity.readFromNBT(entityTag);
5859
//}

Diff for: ‎src/main/java/pl/asie/computronics/integration/forestry/nanomachines/SwarmProvider.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cpw.mods.fml.common.eventhandler.Event;
44
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
55
import forestry.api.apiculture.BeeManager;
6+
import forestry.api.apiculture.EnumBeeType;
67
import forestry.api.apiculture.IBee;
78
import forestry.api.apiculture.IBeeHousing;
89
import li.cil.oc.api.Nanomachines;
@@ -71,7 +72,8 @@ private void findTarget(EntityPlayer player, Event e) {
7172
swingItem(player, e);
7273
}
7374
} else if(player.capabilities != null && player.capabilities.isCreativeMode) {
74-
behavior.spawnNewEntity(player.posX, player.posY + 2f, player.posZ);
75+
behavior.spawnNewEntity(player.posX, player.posY + 2f, player.posZ,
76+
BeeManager.beeRoot.getMemberStack(BeeManager.beeRoot.templateAsIndividual(BeeManager.beeRoot.getDefaultTemplate()), EnumBeeType.QUEEN.ordinal()));
7577
swingItem(player, e);
7678
}
7779
} /*else {
@@ -93,7 +95,8 @@ private void findTarget(EntityPlayer player, Event e) {
9395

9496
private void makeSwarm(double x, double y, double z, EntityPlayer player, IBeeHousing tile, Event e) {
9597
if(tile.getBeekeepingLogic() != null && tile.getBeeInventory() != null && tile.getBeekeepingLogic().canDoBeeFX()) {
96-
IBee member = BeeManager.beeRoot.getMember(tile.getBeeInventory().getQueen());
98+
ItemStack queenStack = tile.getBeeInventory().getQueen();
99+
IBee member = BeeManager.beeRoot.getMember(queenStack);
97100
if(member != null) {
98101
SwarmBehavior behavior = getSwarmBehavior(player);
99102
if(behavior != null) {
@@ -106,7 +109,7 @@ private void makeSwarm(double x, double y, double z, EntityPlayer player, IBeeHo
106109
}
107110
behavior.spawnNewEntity(x, y, z,
108111
member.getGenome().getPrimary().getIconColour(0),
109-
member.getGenome().getTolerantFlyer());
112+
member.getGenome().getTolerantFlyer(), queenStack.copy());
110113
swingItem(player, e);
111114
}
112115
}

0 commit comments

Comments
 (0)
Please sign in to comment.