allow custom types to imitate existing types so that passive effects don't have to be copied

This commit is contained in:
Ellpeck 2019-02-16 21:31:37 +01:00
parent ca7b37b087
commit 5873bd99e8
7 changed files with 12 additions and 6 deletions

View file

@ -42,7 +42,7 @@ public final class NaturesAuraAPI {
public static final String MOD_ID = "naturesaura"; public static final String MOD_ID = "naturesaura";
public static final String API_ID = MOD_ID + "api"; public static final String API_ID = MOD_ID + "api";
public static final String VERSION = "8"; public static final String VERSION = "9";
/** /**
* The list of all {@link AltarRecipe} instances which are the recipes used * The list of all {@link AltarRecipe} instances which are the recipes used

View file

@ -49,7 +49,7 @@ public class BasicAuraContainer implements IAuraContainer {
@Override @Override
public boolean isAcceptableType(IAuraType type) { public boolean isAcceptableType(IAuraType type) {
return this.type == null || this.type == type; return this.type == null || this.type.isSimilar(type);
} }
public void writeNBT(NBTTagCompound compound) { public void writeNBT(NBTTagCompound compound) {

View file

@ -21,4 +21,8 @@ public interface IAuraType {
int getColor(); int getColor();
int getPriority(); int getPriority();
default boolean isSimilar(IAuraType type) {
return this == type;
}
} }

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.api.render.IVisualizable;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityOakGenerator; import de.ellpeck.naturesaura.blocks.tiles.TileEntityOakGenerator;
import net.minecraft.block.BlockSapling; import net.minecraft.block.BlockSapling;
@ -32,7 +33,7 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab
public void onTreeGrow(SaplingGrowTreeEvent event) { public void onTreeGrow(SaplingGrowTreeEvent event) {
World world = event.getWorld(); World world = event.getWorld();
BlockPos pos = event.getPos(); BlockPos pos = event.getPos();
if (!world.isRemote && NaturesAuraAPI.TYPE_OVERWORLD.isPresentInWorld(world) if (!world.isRemote && IAuraType.forWorld(world).isSimilar(NaturesAuraAPI.TYPE_OVERWORLD)
&& world.getBlockState(pos).getBlock() instanceof BlockSapling) { && world.getBlockState(pos).getBlock() instanceof BlockSapling) {
Helper.getTileEntitiesInArea(world, pos, 10, tile -> { Helper.getTileEntitiesInArea(world, pos, 10, tile -> {
if (!(tile instanceof TileEntityOakGenerator)) if (!(tile instanceof TileEntityOakGenerator))

View file

@ -3,6 +3,7 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticleStream; import de.ellpeck.naturesaura.packet.PacketParticleStream;
import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.packet.PacketParticles;
@ -53,7 +54,7 @@ public class TileEntityFlowerGenerator extends TileEntityImpl implements ITickab
int addAmount = 25000; int addAmount = 25000;
int toAdd = Math.max(0, addAmount - curr.getValue() * 100); int toAdd = Math.max(0, addAmount - curr.getValue() * 100);
if (toAdd > 0) { if (toAdd > 0) {
if (NaturesAuraAPI.TYPE_OVERWORLD.isPresentInWorld(this.world) && this.canGenerateRightNow(30, toAdd)) { if (IAuraType.forWorld(this.world).isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) && this.canGenerateRightNow(30, toAdd)) {
int remain = toAdd; int remain = toAdd;
while (remain > 0) { while (remain > 0) {
BlockPos spot = IAuraChunk.getLowestSpot(this.world, this.pos, 30, this.pos); BlockPos spot = IAuraChunk.getLowestSpot(this.world, this.pos, 30, this.pos);

View file

@ -83,7 +83,7 @@ public class GrassDieEffect implements IDrainSpotEffect {
@Override @Override
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
return ModConfig.enabledFeatures.grassDieEffect && type == NaturesAuraAPI.TYPE_OVERWORLD; return ModConfig.enabledFeatures.grassDieEffect && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD);
} }
@Override @Override

View file

@ -90,7 +90,7 @@ public class PlantBoostEffect implements IDrainSpotEffect {
@Override @Override
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) { public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
return ModConfig.enabledFeatures.plantBoostEffect && type == NaturesAuraAPI.TYPE_OVERWORLD; return ModConfig.enabledFeatures.plantBoostEffect && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD);
} }
@Override @Override