mirror of
https://github.com/GoldChick/ExtraBotany.git
synced 2024-10-28 03:40:09 +08:00
v0.1.5
This commit is contained in:
parent
de6108e4ff
commit
6661c149e0
@ -18,7 +18,7 @@ a11e55f651479912f38def68d408d3365bff4e6b assets/extrabotany/blockstates/moonligh
|
||||
5b4b6c301ff57c7d4006e79654cac0e1e68cbe60 assets/extrabotany/blockstates/serenitian.json
|
||||
31853f21bb80a913ba27e5053a843459b3d7d37d assets/extrabotany/blockstates/sunshine_lily.json
|
||||
3792750310ad34d765b0de88f50abf9bd23b365e assets/extrabotany/lang/en_us.json
|
||||
ba11be396d6c0d323351b477bb498a87700b69f3 assets/extrabotany/lang/zh_cn.json
|
||||
5125f587afab80295128b222491c9ac0565b1642 assets/extrabotany/lang/zh_cn.json
|
||||
477b72a89fa3546590428dd7d8d4528c711a98dc assets/extrabotany/models/block/annoying_flower.json
|
||||
2f2803ccc1532c712c13241790c9ec65fb61a97d assets/extrabotany/models/block/bell_flower.json
|
||||
2cc688d6536ea214d2c83c83c2cf9be55b342b23 assets/extrabotany/models/block/bloody_enchantress.json
|
||||
|
@ -200,10 +200,10 @@
|
||||
"extrabotany.page.ego4": "\u7B2C\u4E8C\u9636\u6BB5\u7684\u672C\u6211\u4F1A\u4F7F\u7528$(item)\u6CE2\u6D8C\u4E4B\u5203$(0)\u6216$(item)\u72C2\u661F\u4E4B\u6012$(0),\u540C\u65F6\u6BCF\u7D2F\u79EF\u4E00\u5B9A\u4F20\u9001\u6B21\u6570\u4F1A\u518D\u6B21\u53EC\u5524\u5730\u96F7\u9635\u3002\u5F53\u8840\u91CF\u4F4E\u4E8E\u4E00\u5B9A\u503C\u65F6\u4F1A\u8FDB\u5165\u7B2C\u4E09\u9636\u6BB5\uFF0C\u65E0\u654C\u3001\u56DE\u590D\u751F\u547D\u7684\u540C\u65F6\u4F1A\u53EC\u5524\u56DB\u4E2A\u4EC6\u4ECE\u653B\u51FB\u6311\u6218\u8005\u3002\u4EC6\u4ECE\u5206\u522B\u4F7F\u7528\u56DB\u79CD\u6B66\u5668\uFF0C\u63D0\u524D\u51FB\u8D25\u4EC6\u4ECE\u53EF\u4EE5\u63D0\u524D\u7ED3\u675F\u672C\u6211\u7684\u65E0\u654C\u72B6\u6001\u3002",
|
||||
"extrabotany.page.ego5": "\u672C\u6211\u5728\u7B2C\u4E09\u9636\u6BB5\u53EA\u4F1A\u4F7F\u7528$(item)\u6700\u521D\u5206\u578B$(0)\u5BF9\u73A9\u5BB6\u8FDB\u884C\u653B\u51FB\uFF0C\u5176\u80FD\u529B\u503C\u5728\u8FD9\u4E00\u9636\u6BB5\u4F1A\u8FBE\u5230\u5CF0\u503C\u3002\u51FB\u8D25\u672C\u6211\u53EF\u4EE5\u5F97\u5230$(item)\u6F58\u591A\u62C9\u9B54\u76D2$(0)\uFF0C\u6253\u5F00\u5B83\u53EF\u4EE5\u83B7\u5F97\u4E30\u5BCC\u7684\u5956\u52B1\uFF0C\u5305\u542B\u4E00\u4E2A$(item)\u82F1\u96C4\u52CB\u7AE0$(0)\u3002",
|
||||
"extrabotany.page.ego6": "\u81F3\u9AD8\u6559\u4E49",
|
||||
"extrabotany.page.elementium_shield0": "\u4F7F\u7528\u66F4\u597D\u7684\u6750\u6599\u5236\u4F5C\u7684\u76FE\u724C\u5177\u6709\u66F4\u52A0\u7279\u6B8A\u7684\u80FD\u529B\u3002\u8FD9\u4E9B\u76FE\u724C\u5747\u80FD\u591F\u683C\u6321\u4E00\u4E9B$(thing)\u9057\u7269$(0)\u4EA7\u751F\u7684\u5F39\u5C04\u7269\u3002",
|
||||
"extrabotany.page.elementium_shield0": "\u4F7F\u7528\u66F4\u597D\u7684\u6750\u6599\u5236\u4F5C\u7684\u76FE\u724C\u5177\u6709\u66F4\u52A0\u7279\u6B8A\u7684\u80FD\u529B\u3002\u8FD9\u4E9B\u76FE\u724C\u5747\u80FD\u591F\u683C\u6321\u4E00\u4E9B$(thing)\u9057\u7269$(0)\u4EA7\u751F\u7684\u5F39\u5C04\u7269\u3002\u7136\u800C\uFF0C\u8FD9\u4E9B\u76FE\u724C\u666E\u904D\u5177\u6709\u8F83\u4F4E\u7684\u8010\u4E45\uFF0C\u96BE\u4EE5\u6301\u7EED\u4F7F\u7528\u3002",
|
||||
"extrabotany.page.elementium_shield1": "$(item)\u6E90\u8D28\u94A2\u76FE\u724C$(0)\u6210\u529F\u683C\u6321\u4F24\u5BB3\u540E\u4F1A\u6682\u65F6\u63D0\u5347\u76FE\u724C\u672C\u8EAB\u7684\u5C5E\u6027\u3002",
|
||||
"extrabotany.page.elementium_shield2": "$(item)\u6DF7\u6C8C\u76FE\u724C$(0)\u6210\u529F\u683C\u6321\u4F24\u5BB3\u540E\u4F1A\u5BF9\u5468\u56F4\u7684\u751F\u7269\uFF08\u5305\u62EC\u4F7F\u7528\u8005\uFF09\u9020\u6210\u4E00\u5B9A\u7206\u70B8\u4F24\u5BB3\u3002",
|
||||
"extrabotany.page.elementium_shield3": "$(item)\u6CF0\u62C9\u94A2\u76FE\u724C$(0)\u6210\u529F\u683C\u6321\u4F24\u5BB3\u540E\u4F1A\u5BF9\u9762\u524D\u7684\u751F\u7269\u9020\u6210\u4E00\u5B9A\u4F24\u5BB3\u3002",
|
||||
"extrabotany.page.elementium_shield3": "$(item)\u6CF0\u62C9\u94A2\u76FE\u724C$(0)\u4F1A\u53CD\u5F39\u90E8\u5206\u6210\u529F\u683C\u6321\u7684\u8FD1\u6218\u4F24\u5BB3\u3002",
|
||||
"extrabotany.page.elementium_shield4": "$(item)\u5929\u7A7A\u76FE\u724C$(0)\u6210\u529F\u683C\u6321\u4F24\u5BB3\u540E\u4F1A\u6682\u65F6\u8BA9\u4F7F\u7528\u8005\u53D8\u5F97\u66F4\u52A0\u8F7B\u76C8\u3002",
|
||||
"extrabotany.page.elementstone0": "\u5C06\u5143\u7D20\u7B26\u6587\u70BC\u5236\u6210\u5BF9\u5E94\u7684\u7B26\u77F3\u3002$(item)\u98CE\u4E4B\u7B26\u77F3$(0)\u53EF\u4EE5\u589E\u52A0\u4F69\u6234\u8005\u7684\u79FB\u901F\uFF0C$(item)\u5730\u4E4B\u7B26\u77F3$(0)\u53EF\u4EE5\u63D0\u9AD8\u4F69\u6234\u8005\u7684\u62A4\u7532\uFF0C$(item)\u6C34\u4E4B\u7B26\u77F3$(0)\u53EF\u4EE5\u51CF\u5C11\u4F69\u6234\u8005\u7684\u9B54\u529B\u6D88\u8017\uFF0C$(item)\u706B\u4E4B\u7B26\u77F3$(0)\u53EF\u4EE5\u63D0\u5347\u4F69\u6234\u8005\u7684\u653B\u51FB\u529B\u3002",
|
||||
"extrabotany.page.elementstone1": "\u98CE\u4E4B\u7B26\u77F3",
|
||||
|
@ -1,7 +0,0 @@
|
||||
package chick.extrabotany.api.block;
|
||||
|
||||
public interface ISubTileDecay
|
||||
{
|
||||
int getPassiveTicks();
|
||||
void setPassiveTicks(int x);
|
||||
}
|
@ -1,10 +1,22 @@
|
||||
package chick.extrabotany.api.block;
|
||||
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
|
||||
/**
|
||||
* capability for passive flower
|
||||
* you need to store passive ticks in block nbt
|
||||
*/
|
||||
public interface ISubTilePassiveFlower
|
||||
{
|
||||
/**
|
||||
* get string to store it in the block nbt
|
||||
* default is "passive_ticks"
|
||||
*/
|
||||
default String getTagPassiveTicks()
|
||||
{
|
||||
return "passive_ticks";
|
||||
}
|
||||
|
||||
/**
|
||||
* get ticks it has since last Serenitian in Extrabotany works
|
||||
*/
|
||||
@ -15,13 +27,33 @@ public interface ISubTilePassiveFlower
|
||||
*/
|
||||
void setPassiveTicks(int x);
|
||||
|
||||
/**
|
||||
* add 1 to passiveTicks
|
||||
* use it when necessary
|
||||
*/
|
||||
void addPassiveTicks();
|
||||
|
||||
/**
|
||||
* just as its name (usually 72000 ticks, that is, 1 hour)
|
||||
*/
|
||||
int getMaxPassiveTicks();
|
||||
int getDecayTicks();
|
||||
|
||||
/**
|
||||
* does the flower block have drops
|
||||
*/
|
||||
boolean isNoDrop();
|
||||
|
||||
void serenitianWorks();
|
||||
|
||||
void decay();
|
||||
|
||||
default boolean isHydroangeas()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
default void tickFlower(TickEvent event)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package chick.extrabotany.common.base;
|
||||
|
||||
public class ExtrabotanyReflect
|
||||
{
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
package chick.extrabotany.common.base;
|
||||
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
||||
public class ISubTilePassiveFlowerImpl implements ISubTilePassiveFlower
|
||||
{
|
||||
private int passiveTicks;
|
||||
private BlockEntityType<?> blockEntityType;
|
||||
|
||||
public ISubTilePassiveFlowerImpl(BlockEntityType<?> blockEntityType)
|
||||
{
|
||||
this.blockEntityType = blockEntityType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPassiveTicks()
|
||||
{
|
||||
return passiveTicks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassiveTicks(int x)
|
||||
{
|
||||
passiveTicks = x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxPassiveTicks()
|
||||
{
|
||||
return 72000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNoDrop()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package chick.extrabotany.common.blocks;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import vazkii.botania.api.subtile.TileEntityGeneratingFlower;
|
||||
|
||||
public abstract class SubTilePassive extends TileEntityGeneratingFlower
|
||||
{
|
||||
public SubTilePassive(BlockEntityType<?> type, BlockPos pos, BlockState state)
|
||||
{
|
||||
super(type, pos, state);
|
||||
}
|
||||
protected int passiveDecayTicks;
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package chick.extrabotany.common.blocks.subtile.functional;
|
||||
|
||||
import chick.extrabotany.common.blocks.ModSubtiles;
|
||||
import chick.extrabotany.api.block.ISubTileDecay;
|
||||
import chick.extrabotany.xplat.IXplatAbstractions;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import vazkii.botania.api.subtile.RadiusDescriptor;
|
||||
@ -28,12 +28,13 @@ public class SubTileSerenitian extends TileEntityFunctionalFlower
|
||||
{
|
||||
BlockPos pos = getEffectivePos().offset(dx, 0, dz);
|
||||
var tile = level.getBlockEntity(pos);
|
||||
if (tile instanceof ISubTileDecay)
|
||||
if (tile != null)
|
||||
{
|
||||
ISubTileDecay passive = (ISubTileDecay) tile;
|
||||
if (passive.getPassiveTicks() >= 100)
|
||||
var c = IXplatAbstractions.INSTANCE.findPassiveFlower(tile);
|
||||
if (c != null && c.getPassiveTicks() >= 100)
|
||||
{
|
||||
passive.setPassiveTicks(0);
|
||||
c.setPassiveTicks(0);
|
||||
c.serenitianWorks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,23 +1,26 @@
|
||||
package chick.extrabotany.common.blocks.subtile.generating;
|
||||
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import chick.extrabotany.common.blocks.ModSubtiles;
|
||||
import chick.extrabotany.common.blocks.SubTilePassive;
|
||||
import chick.extrabotany.xplat.IXplatAbstractions;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import vazkii.botania.api.subtile.RadiusDescriptor;
|
||||
import vazkii.botania.api.subtile.TileEntityGeneratingFlower;
|
||||
|
||||
public class SubTileBellflower extends SubTilePassive
|
||||
public class SubTileBellflower extends TileEntityGeneratingFlower
|
||||
{
|
||||
private static final int RANGE = 3;
|
||||
private static final int DECAY_TIME = 72000;
|
||||
private final ISubTilePassiveFlower flower;
|
||||
|
||||
public SubTileBellflower(BlockPos pos, BlockState state)
|
||||
{
|
||||
super(ModSubtiles.BELLFLOWER, pos, state);
|
||||
flower = IXplatAbstractions.INSTANCE.findPassiveFlower(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -51,20 +54,11 @@ public class SubTileBellflower extends SubTilePassive
|
||||
}
|
||||
if (this.level.canSeeSky(this.getEffectivePos()) && y > baseY)
|
||||
{
|
||||
if (++passiveDecayTicks > DECAY_TIME)
|
||||
flower.addPassiveTicks();
|
||||
int rain = this.level.isRaining() ? 10 : 0;
|
||||
if (flower.getPassiveTicks() % 10 == 0)
|
||||
{
|
||||
getLevel().destroyBlock(getBlockPos(), false);
|
||||
if (Blocks.DEAD_BUSH.defaultBlockState().canSurvive(getLevel(), getBlockPos()))
|
||||
{
|
||||
getLevel().setBlockAndUpdate(getBlockPos(), Blocks.DEAD_BUSH.defaultBlockState());
|
||||
}
|
||||
} else
|
||||
{
|
||||
int rain = this.level.isRaining() ? 10 : 0;
|
||||
if (this.passiveDecayTicks % 10 == 0)
|
||||
{
|
||||
addMana((baseGen + rain) * (int) (0.3F * (float) y / (float) baseY * times));
|
||||
}
|
||||
addMana((baseGen + rain) * (int) (0.3F * (float) y / (float) baseY * times));
|
||||
}
|
||||
sync();
|
||||
}
|
||||
@ -86,14 +80,14 @@ public class SubTileBellflower extends SubTilePassive
|
||||
public void writeToPacketNBT(CompoundTag cmp)
|
||||
{
|
||||
super.writeToPacketNBT(cmp);
|
||||
cmp.putInt("bellI", passiveDecayTicks);
|
||||
cmp.putInt(flower.getTagPassiveTicks(), flower.getPassiveTicks());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromPacketNBT(CompoundTag cmp)
|
||||
{
|
||||
super.readFromPacketNBT(cmp);
|
||||
passiveDecayTicks = cmp.getInt("bellI");
|
||||
flower.setPassiveTicks(cmp.getInt(flower.getTagPassiveTicks()));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@ -102,5 +96,4 @@ public class SubTileBellflower extends SubTilePassive
|
||||
{
|
||||
return RadiusDescriptor.Rectangle.square(getEffectivePos(), RANGE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,28 +1,27 @@
|
||||
package chick.extrabotany.common.blocks.subtile.generating;
|
||||
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import chick.extrabotany.common.blocks.ModSubtiles;
|
||||
import chick.extrabotany.api.block.ISubTileDecay;
|
||||
import chick.extrabotany.common.blocks.SubTilePassive;
|
||||
import chick.extrabotany.xplat.IXplatAbstractions;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.EmptyFluid;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraftforge.fluids.IFluidBlock;
|
||||
import vazkii.botania.api.subtile.RadiusDescriptor;
|
||||
import vazkii.botania.api.subtile.TileEntityGeneratingFlower;
|
||||
|
||||
public class SubTileGeminiOrchid extends SubTilePassive implements ISubTileDecay
|
||||
public class SubTileGeminiOrchid extends TileEntityGeneratingFlower
|
||||
{
|
||||
private static final BlockPos[] OFFSETS = {new BlockPos(0, 0, 1), new BlockPos(0, 0, -1), new BlockPos(1, 0, 0), new BlockPos(-1, 0, 0), new BlockPos(-1, 0, 1), new BlockPos(-1, 0, -1), new BlockPos(1, 0, 1), new BlockPos(1, 0, -1)};
|
||||
|
||||
private static final int RANGE = 2;
|
||||
private static final int DECAY_TIME = 72000;
|
||||
|
||||
private final ISubTilePassiveFlower flower;
|
||||
public SubTileGeminiOrchid(BlockPos pos, BlockState state)
|
||||
{
|
||||
super(ModSubtiles.GEMINIORCHID, pos, state);
|
||||
flower = IXplatAbstractions.INSTANCE.findPassiveFlower(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -37,7 +36,6 @@ public class SubTileGeminiOrchid extends SubTilePassive implements ISubTileDecay
|
||||
return 0xFFFF00;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void tickFlower()
|
||||
{
|
||||
@ -67,14 +65,8 @@ public class SubTileGeminiOrchid extends SubTilePassive implements ISubTileDecay
|
||||
}
|
||||
if (getMana() < getMaxMana() && tempMax > tempMin)
|
||||
{
|
||||
if (++passiveDecayTicks > DECAY_TIME)
|
||||
{
|
||||
getLevel().destroyBlock(getBlockPos(), false);
|
||||
if (Blocks.DEAD_BUSH.defaultBlockState().canSurvive(getLevel(), getBlockPos()))
|
||||
{
|
||||
getLevel().setBlockAndUpdate(getBlockPos(), Blocks.DEAD_BUSH.defaultBlockState());
|
||||
}
|
||||
} else if (ticksExisted % 8 == 0)
|
||||
flower.addPassiveTicks();
|
||||
if (flower.getPassiveTicks() % 8 == 0)
|
||||
{
|
||||
addMana((tempMax - tempMin) / 100 > 0 ? (tempMax - tempMin) / 100 : 1);
|
||||
}
|
||||
@ -87,14 +79,14 @@ public class SubTileGeminiOrchid extends SubTilePassive implements ISubTileDecay
|
||||
public void writeToPacketNBT(CompoundTag cmp)
|
||||
{
|
||||
super.writeToPacketNBT(cmp);
|
||||
cmp.putInt("geminiI", passiveDecayTicks);
|
||||
cmp.putInt(flower.getTagPassiveTicks(), flower.getPassiveTicks());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromPacketNBT(CompoundTag cmp)
|
||||
{
|
||||
super.readFromPacketNBT(cmp);
|
||||
passiveDecayTicks = cmp.getInt("geminiI");
|
||||
flower.setPassiveTicks(cmp.getInt(flower.getTagPassiveTicks()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -103,20 +95,4 @@ public class SubTileGeminiOrchid extends SubTilePassive implements ISubTileDecay
|
||||
return RadiusDescriptor.Rectangle.square(getEffectivePos(), RANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassiveTicks(int x)
|
||||
{
|
||||
sync();
|
||||
this.passiveDecayTicks = x;
|
||||
if (x == 0)
|
||||
{
|
||||
emitParticle(ParticleTypes.ANGRY_VILLAGER, Math.random() * 0.2, 0.7, Math.random() * 0.2, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPassiveTicks()
|
||||
{
|
||||
return passiveDecayTicks;
|
||||
}
|
||||
}
|
||||
|
@ -1,25 +1,26 @@
|
||||
package chick.extrabotany.common.blocks.subtile.generating;
|
||||
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import chick.extrabotany.common.blocks.ModSubtiles;
|
||||
import chick.extrabotany.api.block.ISubTileDecay;
|
||||
import chick.extrabotany.common.blocks.SubTilePassive;
|
||||
import chick.extrabotany.xplat.IXplatAbstractions;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import vazkii.botania.api.subtile.RadiusDescriptor;
|
||||
import vazkii.botania.api.subtile.TileEntityGeneratingFlower;
|
||||
|
||||
public class SubTileMoonlightLily extends SubTilePassive implements ISubTileDecay
|
||||
public class SubTileMoonlightLily extends TileEntityGeneratingFlower
|
||||
{
|
||||
private static final int RANGE = 2;
|
||||
private static final int DECAY_TIME = 72000;
|
||||
private boolean particle = false;
|
||||
private final ISubTilePassiveFlower flower;
|
||||
|
||||
public SubTileMoonlightLily(BlockPos pos, BlockState state)
|
||||
{
|
||||
super(ModSubtiles.MOONLIGHTLILY, pos, state);
|
||||
flower = IXplatAbstractions.INSTANCE.findPassiveFlower(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -48,18 +49,9 @@ public class SubTileMoonlightLily extends SubTilePassive implements ISubTileDeca
|
||||
particle = false;
|
||||
} else
|
||||
{
|
||||
if (++passiveDecayTicks > DECAY_TIME)
|
||||
{
|
||||
getLevel().destroyBlock(getBlockPos(), false);
|
||||
if (Blocks.DEAD_BUSH.defaultBlockState().canSurvive(getLevel(), getBlockPos()))
|
||||
{
|
||||
getLevel().setBlockAndUpdate(getBlockPos(), Blocks.DEAD_BUSH.defaultBlockState());
|
||||
}
|
||||
} else
|
||||
{
|
||||
particle = true;
|
||||
addMana(1);
|
||||
}
|
||||
flower.addPassiveTicks();
|
||||
particle = true;
|
||||
addMana(1);
|
||||
}
|
||||
sync();
|
||||
} else
|
||||
@ -81,7 +73,7 @@ public class SubTileMoonlightLily extends SubTilePassive implements ISubTileDeca
|
||||
{
|
||||
super.writeToPacketNBT(cmp);
|
||||
cmp.putBoolean("moonB", particle);
|
||||
cmp.putInt("moonI", passiveDecayTicks);
|
||||
cmp.putInt(flower.getTagPassiveTicks(), flower.getPassiveTicks());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -89,7 +81,7 @@ public class SubTileMoonlightLily extends SubTilePassive implements ISubTileDeca
|
||||
{
|
||||
super.readFromPacketNBT(cmp);
|
||||
particle = cmp.getBoolean("moonB");
|
||||
passiveDecayTicks = cmp.getInt("moonI");
|
||||
flower.setPassiveTicks(cmp.getInt(flower.getTagPassiveTicks()));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@ -98,20 +90,4 @@ public class SubTileMoonlightLily extends SubTilePassive implements ISubTileDeca
|
||||
{
|
||||
return RadiusDescriptor.Rectangle.square(getEffectivePos(), RANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassiveTicks(int x)
|
||||
{
|
||||
sync();
|
||||
this.passiveDecayTicks = x;
|
||||
if (x == 0)
|
||||
{
|
||||
emitParticle(ParticleTypes.ANGRY_VILLAGER, Math.random() * 0.2, 0.7, Math.random() * 0.2, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public int getPassiveTicks()
|
||||
{
|
||||
return passiveDecayTicks;
|
||||
}
|
||||
}
|
||||
|
@ -1,25 +1,26 @@
|
||||
package chick.extrabotany.common.blocks.subtile.generating;
|
||||
|
||||
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import chick.extrabotany.common.blocks.ModSubtiles;
|
||||
import chick.extrabotany.api.block.ISubTileDecay;
|
||||
import chick.extrabotany.common.blocks.SubTilePassive;
|
||||
import chick.extrabotany.xplat.IXplatAbstractions;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import vazkii.botania.api.subtile.RadiusDescriptor;
|
||||
import vazkii.botania.api.subtile.TileEntityGeneratingFlower;
|
||||
|
||||
public class SubTileSunshineLily extends SubTilePassive implements ISubTileDecay
|
||||
public class SubTileSunshineLily extends TileEntityGeneratingFlower
|
||||
{
|
||||
private static final int RANGE = 2;
|
||||
private static final int DECAY_TIME = 72000;
|
||||
private boolean particle = false;
|
||||
private final ISubTilePassiveFlower flower;
|
||||
|
||||
public SubTileSunshineLily(BlockPos pos, BlockState state)
|
||||
{
|
||||
super(ModSubtiles.SUNSHINELILY, pos, state);
|
||||
flower = IXplatAbstractions.INSTANCE.findPassiveFlower(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -34,7 +35,6 @@ public class SubTileSunshineLily extends SubTilePassive implements ISubTileDecay
|
||||
return 0xFFA500;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void tickFlower()
|
||||
{
|
||||
@ -48,18 +48,9 @@ public class SubTileSunshineLily extends SubTilePassive implements ISubTileDecay
|
||||
particle = false;
|
||||
} else
|
||||
{
|
||||
if (++passiveDecayTicks > DECAY_TIME)
|
||||
{
|
||||
getLevel().destroyBlock(getBlockPos(), false);
|
||||
if (Blocks.DEAD_BUSH.defaultBlockState().canSurvive(getLevel(), getBlockPos()))
|
||||
{
|
||||
getLevel().setBlockAndUpdate(getBlockPos(), Blocks.DEAD_BUSH.defaultBlockState());
|
||||
}
|
||||
} else
|
||||
{
|
||||
particle = true;
|
||||
addMana(1);
|
||||
}
|
||||
flower.addPassiveTicks();
|
||||
particle = true;
|
||||
addMana(1);
|
||||
}
|
||||
sync();
|
||||
} else
|
||||
@ -81,7 +72,7 @@ public class SubTileSunshineLily extends SubTilePassive implements ISubTileDecay
|
||||
{
|
||||
super.writeToPacketNBT(cmp);
|
||||
cmp.putBoolean("sunB", particle);
|
||||
cmp.putInt("sunI", passiveDecayTicks);
|
||||
cmp.putInt(flower.getTagPassiveTicks(), flower.getPassiveTicks());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -89,7 +80,7 @@ public class SubTileSunshineLily extends SubTilePassive implements ISubTileDecay
|
||||
{
|
||||
super.readFromPacketNBT(cmp);
|
||||
particle = cmp.getBoolean("sunB");
|
||||
passiveDecayTicks = cmp.getInt("sunI");
|
||||
flower.setPassiveTicks(cmp.getInt(flower.getTagPassiveTicks()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -97,19 +88,4 @@ public class SubTileSunshineLily extends SubTilePassive implements ISubTileDecay
|
||||
{
|
||||
return RadiusDescriptor.Rectangle.square(getEffectivePos(), RANGE);
|
||||
}
|
||||
@Override
|
||||
public void setPassiveTicks(int x)
|
||||
{
|
||||
sync();
|
||||
this.passiveDecayTicks = x;
|
||||
if (x == 0)
|
||||
{
|
||||
emitParticle(ParticleTypes.ANGRY_VILLAGER, Math.random() * 0.2, 0.7, Math.random() * 0.2, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public int getPassiveTicks()
|
||||
{
|
||||
return passiveDecayTicks;
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,15 @@
|
||||
package chick.extrabotany.forge.client;
|
||||
|
||||
import chick.extrabotany.ExtraBotany;
|
||||
import chick.extrabotany.api.ExtraBotanyForgeCapabilities;
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import chick.extrabotany.common.ModBlocks;
|
||||
import chick.extrabotany.common.ModItemProperties;
|
||||
import chick.extrabotany.common.ModItems;
|
||||
import chick.extrabotany.common.base.ISubTilePassiveFlowerImpl;
|
||||
import chick.extrabotany.forge.impl.ISubTilePassiveFlowerImpl;
|
||||
import chick.extrabotany.common.baubles.SagesManaRing;
|
||||
import chick.extrabotany.common.blocks.ModSubtiles;
|
||||
import chick.extrabotany.common.blocks.subtile.generating.SubTileMoonlightLily;
|
||||
import chick.extrabotany.common.blocks.tile.TileDimensionCatalyst;
|
||||
import chick.extrabotany.common.loots.ModLootModifiers;
|
||||
import chick.extrabotany.common.tools.weapons.*;
|
||||
@ -113,7 +115,7 @@ public class ForgeClientInitializer
|
||||
}
|
||||
|
||||
/**
|
||||
* 森林法杖,下同
|
||||
* Register BlockEntity Capabilities
|
||||
*/
|
||||
private static final Supplier<Map<BlockEntityType<?>, Function<BlockEntity, IWandHUD>>> WAND_HUD = Suppliers.memoize(() ->
|
||||
{
|
||||
@ -127,11 +129,12 @@ public class ForgeClientInitializer
|
||||
});
|
||||
return Collections.unmodifiableMap(ret);
|
||||
});
|
||||
private static final Supplier<Map<BlockEntityType<?>, Function<BlockEntityType<?>, ISubTilePassiveFlower>>> PASSIVE_FLOWER = Suppliers.memoize(() -> Map.of(
|
||||
private static final Supplier<Map<BlockEntityType<?>, Function<BlockEntity, ISubTilePassiveFlower>>> PASSIVE_FLOWER = Suppliers.memoize(() -> Map.of(
|
||||
vazkii.botania.common.block.ModSubtiles.HYDROANGEAS, ISubTilePassiveFlowerImpl::new,
|
||||
ModSubtiles.SUNSHINELILY, ISubTilePassiveFlowerImpl::new,
|
||||
ModSubtiles.MOONLIGHTLILY, ISubTilePassiveFlowerImpl::new
|
||||
));
|
||||
|
||||
private static void attachBlockEntityCapabilities(AttachCapabilitiesEvent<BlockEntity> e)
|
||||
{
|
||||
var be = e.getObject();
|
||||
@ -142,8 +145,18 @@ public class ForgeClientInitializer
|
||||
e.addCapability(prefix("wand_hud"),
|
||||
CapabilityUtil.makeProvider(BotaniaForgeClientCapabilities.WAND_HUD, makeWandHud.apply(be)));
|
||||
}
|
||||
|
||||
var passiveFlower = PASSIVE_FLOWER.get().get(be.getType());
|
||||
if (passiveFlower != null)
|
||||
{
|
||||
e.addCapability(new ResourceLocation(ExtraBotany.MODID, "passive_flower"),
|
||||
CapabilityUtil.makeProvider(ExtraBotanyForgeCapabilities.PASSIVE_FLOWER, passiveFlower.apply(be)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Item Capabilities
|
||||
*/
|
||||
private static final Supplier<Map<Item, Function<ItemStack, IManaItem>>> MANA_ITEM = Suppliers.memoize(() -> Map.of(
|
||||
ModItems.SAGES_MANA_RING.get(), SagesManaRing.GreaterManaItem::new
|
||||
));
|
||||
|
@ -0,0 +1,99 @@
|
||||
package chick.extrabotany.forge.impl;
|
||||
|
||||
import chick.extrabotany.ExtraBotany;
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
import vazkii.botania.api.subtile.TileEntitySpecialFlower;
|
||||
import vazkii.botania.common.block.subtile.generating.SubTileHydroangeas;
|
||||
|
||||
/**
|
||||
* default passive flower capability
|
||||
* just use it if you don't want any change
|
||||
*/
|
||||
public class ISubTilePassiveFlowerImpl implements ISubTilePassiveFlower
|
||||
{
|
||||
private final TileEntitySpecialFlower flower;
|
||||
private int passiveTicks;
|
||||
|
||||
public ISubTilePassiveFlowerImpl(BlockEntity blockEntity)
|
||||
{
|
||||
if (blockEntity instanceof TileEntitySpecialFlower flower)
|
||||
{
|
||||
this.flower = flower;
|
||||
} else
|
||||
{
|
||||
throw new IllegalStateException("Extrabotany Error! Not a Special Flower is attached to Capability ISubTilePassiveFlower!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPassiveTicks()
|
||||
{
|
||||
if (flower instanceof SubTileHydroangeas hydroangeas)
|
||||
{
|
||||
return ObfuscationReflectionHelper.getPrivateValue(SubTileHydroangeas.class, hydroangeas, "passiveDecayTicks");
|
||||
}
|
||||
return passiveTicks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassiveTicks(int x)
|
||||
{
|
||||
ExtraBotany.LOGGER.debug("sb250 impl tick=" + getPassiveTicks());
|
||||
ExtraBotany.LOGGER.debug("sb250 tag tick=" + flower.saveWithFullMetadata().getInt(getTagPassiveTicks()));
|
||||
|
||||
if (flower instanceof SubTileHydroangeas hydroangeas)
|
||||
{
|
||||
ObfuscationReflectionHelper.setPrivateValue(SubTileHydroangeas.class, hydroangeas, 0, "passiveDecayTicks");
|
||||
}
|
||||
|
||||
passiveTicks = x;
|
||||
|
||||
if (getPassiveTicks() > getDecayTicks())
|
||||
{
|
||||
decay();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPassiveTicks()
|
||||
{
|
||||
setPassiveTicks(getPassiveTicks() + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDecayTicks()
|
||||
{
|
||||
return 200;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNoDrop()
|
||||
{
|
||||
return !(flower instanceof SubTileHydroangeas);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serenitianWorks()
|
||||
{
|
||||
flower.emitParticle(ParticleTypes.ANGRY_VILLAGER, Math.random() * 0.2, 0.7, Math.random() * 0.2, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decay()
|
||||
{
|
||||
var level = flower.getLevel();
|
||||
var blockpos = flower.getBlockPos();
|
||||
if (level != null)
|
||||
{
|
||||
level.destroyBlock(blockpos, false);
|
||||
if (Blocks.DEAD_BUSH.defaultBlockState().canSurvive(level, blockpos))
|
||||
{
|
||||
level.setBlockAndUpdate(blockpos, Blocks.DEAD_BUSH.defaultBlockState());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package chick.extrabotany.forge.mixin.client;
|
||||
|
||||
import chick.extrabotany.api.block.ISubTileDecay;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import vazkii.botania.common.block.subtile.generating.SubTileFluidGenerator;
|
||||
import vazkii.botania.common.block.subtile.generating.SubTileHydroangeas;
|
||||
|
||||
@Mixin(SubTileHydroangeas.class)
|
||||
public abstract class MixinHydroangeas extends SubTileFluidGenerator implements ISubTileDecay
|
||||
{
|
||||
//may cause error!
|
||||
@Shadow
|
||||
private int passiveDecayTicks;
|
||||
|
||||
protected MixinHydroangeas(BlockEntityType<?> type, BlockPos pos, BlockState state, TagKey<Fluid> consumedFluid, int startBurnTime, int manaPerTick, int maxCooldown)
|
||||
{
|
||||
super(type, pos, state, consumedFluid, startBurnTime, manaPerTick, maxCooldown);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassiveTicks(int x)
|
||||
{
|
||||
sync();
|
||||
this.passiveDecayTicks = x;
|
||||
if (x == 0)
|
||||
{
|
||||
emitParticle(ParticleTypes.ANGRY_VILLAGER, Math.random() * 0.2, 0.7, Math.random() * 0.2, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPassiveTicks()
|
||||
{
|
||||
return passiveDecayTicks;
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package chick.extrabotany.forge.xplat;
|
||||
|
||||
import chick.extrabotany.ExtraBotany;
|
||||
import chick.extrabotany.api.ExtraBotanyForgeCapabilities;
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import chick.extrabotany.xplat.IXplatAbstractions;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.fml.ModList;
|
||||
import net.minecraftforge.fml.loading.FMLLoader;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ForgeXplatImpl implements IXplatAbstractions
|
||||
{
|
||||
@Override
|
||||
public boolean isForge()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModLoaded(String modId)
|
||||
{
|
||||
return ModList.get().isLoaded(modId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDevEnvironment()
|
||||
{
|
||||
return !FMLLoader.isProduction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPhysicalClient()
|
||||
{
|
||||
return FMLLoader.getDist() == Dist.CLIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getExtrabotanyVersion()
|
||||
{
|
||||
return ModList.get().getModContainerById(ExtraBotany.MODID).get().getModInfo().getVersion().toString();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ISubTilePassiveFlower findPassiveFlower(BlockEntity blockEntity)
|
||||
{
|
||||
return blockEntity.getCapability(ExtraBotanyForgeCapabilities.PASSIVE_FLOWER).orElse(null);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package chick.extrabotany.xplat;
|
||||
|
||||
import chick.extrabotany.ExtraBotany;
|
||||
import chick.extrabotany.api.block.ISubTilePassiveFlower;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public interface IXplatAbstractions
|
||||
{
|
||||
// Yes, this forms a loop by default. Each loader overrides their own to break the loop
|
||||
default boolean isFabric()
|
||||
{
|
||||
return !isForge();
|
||||
}
|
||||
|
||||
default boolean isForge()
|
||||
{
|
||||
return !isFabric();
|
||||
}
|
||||
|
||||
boolean isModLoaded(String modId);
|
||||
|
||||
boolean isDevEnvironment();
|
||||
|
||||
boolean isPhysicalClient();
|
||||
|
||||
String getExtrabotanyVersion();
|
||||
|
||||
@Nullable
|
||||
ISubTilePassiveFlower findPassiveFlower(BlockEntity blockEntity);
|
||||
|
||||
IXplatAbstractions INSTANCE = find();
|
||||
|
||||
private static IXplatAbstractions find()
|
||||
{
|
||||
var providers = ServiceLoader.load(IXplatAbstractions.class).stream().toList();
|
||||
if (providers.size() != 1)
|
||||
{
|
||||
var names = providers.stream().map(p -> p.type().getName()).collect(Collectors.joining(",", "[", "]"));
|
||||
throw new IllegalStateException("Extrabotany Error:There should be exactly one IXplatAbstractions implementation on the classpath. Found: " + names);
|
||||
} else
|
||||
{
|
||||
var provider = providers.get(0);
|
||||
ExtraBotany.LOGGER.debug("Instantiating xplat impl: " + provider.type().getName());
|
||||
return provider.get();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
chick.extrabotany.forge.xplat.ForgeXplatImpl
|
@ -5,7 +5,6 @@
|
||||
"package": "chick.extrabotany.forge.mixin",
|
||||
"client": [
|
||||
"client.MixinArmorModel",
|
||||
"client.MixinHydroangeas",
|
||||
"client.MixinLightning"
|
||||
],
|
||||
"injectors": {
|
||||
|
Loading…
Reference in New Issue
Block a user