From fc72670cda9e914402e31498a6e6012e39b61286 Mon Sep 17 00:00:00 2001 From: ANightDazingZoroark Date: Thu, 4 Jul 2024 01:18:12 +0800 Subject: [PATCH] final commit b4 update here we gooo --- build.gradle | 1 + libs/Hwyla-1.8.26-B41_1.12.2-api.jar | Bin 0 -> 31712 bytes .../prift/client/ui/RiftEggMenu.java | 7 +- .../client/ui/RiftSemiManualPresserMenu.java | 1 + .../prift/compat/hwyla/RiftHWYLA.java | 44 ++++++++++ .../RiftBlowPoweredTurbineProvider.java | 32 +++++++ .../hwyla/provider/RiftCrankProvider.java | 30 +++++++ .../provider/RiftCreaturePartProvider.java | 48 +++++++++++ .../RiftSemiManualMachineProvider.java | 30 +++++++ .../TileEntityBlowPoweredTurbine.java | 6 ++ .../TileEntityBlowPoweredTurbinePart.java | 9 ++ .../TileEntitySemiManualPresser.java | 4 - .../prift/server/ServerProxy.java | 1 + .../prift/server/blocks/RiftBlocks.java | 6 ++ .../prift/server/entity/ai/RiftAttack.java | 28 +++--- .../server/entity/ai/RiftChargeAttack.java | 5 +- .../entity/creature/Parasaurolophus.java | 2 +- .../server/entity/creature/RiftCreature.java | 15 ++-- .../server/entity/creature/Tyrannosaurus.java | 2 +- .../entity/interfaces/IImpregnable.java | 2 +- .../recipes/RiftIngredientBucketFluid.java | 3 +- .../recipes/RiftIngredientFluidStack.java | 81 ++++++++++++++++++ .../resources/assets/prift/lang/en_us.lang | 6 +- .../prift/recipes/cryoberry_juice_bucket.json | 36 ++++++++ .../prift/recipes/pyroberry_juice_bucket.json | 36 ++++++++ 25 files changed, 403 insertions(+), 32 deletions(-) create mode 100644 libs/Hwyla-1.8.26-B41_1.12.2-api.jar create mode 100644 src/main/java/anightdazingzoroark/prift/compat/hwyla/RiftHWYLA.java create mode 100644 src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftBlowPoweredTurbineProvider.java create mode 100644 src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCrankProvider.java create mode 100644 src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCreaturePartProvider.java create mode 100644 src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftSemiManualMachineProvider.java create mode 100644 src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientFluidStack.java create mode 100644 src/main/resources/assets/prift/recipes/cryoberry_juice_bucket.json create mode 100644 src/main/resources/assets/prift/recipes/pyroberry_juice_bucket.json diff --git a/build.gradle b/build.gradle index ff552b5c..e05d708d 100644 --- a/build.gradle +++ b/build.gradle @@ -143,6 +143,7 @@ dependencies { compileOnly "curse.maven:mysticalmechanics-300742:3006392" compileOnly "mezz.jei:jei_${mc_version}:${jei_version}:api" compileOnly "curse.maven:crafttweaker-239197:5354089" + compileOnly files("libs/Hwyla-1.8.26-B41_1.12.2-api.jar") implementation "mezz.jei:jei_${mc_version}:${jei_version}" } diff --git a/libs/Hwyla-1.8.26-B41_1.12.2-api.jar b/libs/Hwyla-1.8.26-B41_1.12.2-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..1249e320ed8b1d9b0febd6861f3dc738c5059487 GIT binary patch literal 31712 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 getWailaBody(ItemStack itemStack, List tooltip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + TileEntity tileEntity = accessor.getTileEntity(); + if (tileEntity instanceof TileEntityBlowPoweredTurbine) { + TileEntityBlowPoweredTurbine turbine = (TileEntityBlowPoweredTurbine) tileEntity; + tooltip.add(I18n.format("hwyla.power_created", (int)turbine.getPower()+".0 R")); + } + else if (tileEntity instanceof TileEntityBlowPoweredTurbinePart) { + TileEntityBlowPoweredTurbinePart turbinePart = (TileEntityBlowPoweredTurbinePart)tileEntity; + TileEntityBlowPoweredTurbine turbine = turbinePart.getTurbine(); + int power = (int)turbine.getPower(); + tooltip.add(I18n.format("hwyla.power_created", power+".0 R")); + } + return tooltip; + } +} diff --git a/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCrankProvider.java b/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCrankProvider.java new file mode 100644 index 00000000..a94696f7 --- /dev/null +++ b/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCrankProvider.java @@ -0,0 +1,30 @@ +package anightdazingzoroark.prift.compat.hwyla.provider; + +import anightdazingzoroark.prift.compat.mysticalmechanics.tileentities.TileEntityHandCrank; +import anightdazingzoroark.prift.compat.mysticalmechanics.tileentities.TileEntityLeadPoweredCrank; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import javax.annotation.Nonnull; +import java.util.List; + +public class RiftCrankProvider implements IWailaDataProvider { + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List tooltip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + TileEntity tileEntity = accessor.getTileEntity(); + if (tileEntity instanceof TileEntityHandCrank) { + TileEntityHandCrank handCrank = (TileEntityHandCrank) tileEntity; + tooltip.add(I18n.format("hwyla.power_created", (int)handCrank.getPower()+".0 R")); + } + if (tileEntity instanceof TileEntityLeadPoweredCrank) { + TileEntityLeadPoweredCrank leadPoweredCrank = (TileEntityLeadPoweredCrank) tileEntity; + tooltip.add(I18n.format("hwyla.power_created", leadPoweredCrank.mechPower.getPower(null)+" R")); + } + return tooltip; + } +} diff --git a/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCreaturePartProvider.java b/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCreaturePartProvider.java new file mode 100644 index 00000000..0a4e55ac --- /dev/null +++ b/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftCreaturePartProvider.java @@ -0,0 +1,48 @@ +package anightdazingzoroark.prift.compat.hwyla.provider; + +import anightdazingzoroark.prift.RiftInitialize; +import anightdazingzoroark.prift.server.entity.creature.RiftCreaturePart; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaEntityAccessor; +import mcp.mobius.waila.api.IWailaEntityProvider; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.util.text.TextFormatting; + +import javax.annotation.Nonnull; +import java.util.List; + +public class RiftCreaturePartProvider implements IWailaEntityProvider { + @Nonnull + @Override + public List getWailaHead(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config) { + currenttip.clear(); + RiftCreaturePart part = (RiftCreaturePart) entity; + if (part != null) { + String creatureName = TextFormatting.WHITE + part.getParent().getName(false); + String level = TextFormatting.GRAY + I18n.format("tametrait.level", part.getParent().getLevel()); + currenttip.add(creatureName + " (" + level + ")"); + } + return currenttip; + } + + @Nonnull + @Override + public List getWailaBody(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config) { + RiftCreaturePart part = (RiftCreaturePart) entity; + if (part != null && config.getConfig("general.showhp")) { + int currentHealth = (int)part.getParent().getHealth(); + int maxHealth = (int)part.getParent().getMaxHealth(); + currenttip.add(I18n.format("hwyla.health", currentHealth, maxHealth)); + } + return currenttip; + } + + @Nonnull + @Override + public List getWailaTail(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config) { + currenttip.clear(); + currenttip.add(TextFormatting.BLUE + "" + TextFormatting.ITALIC + RiftInitialize.MODNAME); + return currenttip; + } +} diff --git a/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftSemiManualMachineProvider.java b/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftSemiManualMachineProvider.java new file mode 100644 index 00000000..0296125c --- /dev/null +++ b/src/main/java/anightdazingzoroark/prift/compat/hwyla/provider/RiftSemiManualMachineProvider.java @@ -0,0 +1,30 @@ +package anightdazingzoroark.prift.compat.hwyla.provider; + +import anightdazingzoroark.prift.compat.mysticalmechanics.tileentities.TileEntitySemiManualBase; +import anightdazingzoroark.prift.compat.mysticalmechanics.tileentities.TileEntitySemiManualTopBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import javax.annotation.Nonnull; +import java.util.List; + +public class RiftSemiManualMachineProvider implements IWailaDataProvider { + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List tooltip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + TileEntity tileEntity = accessor.getTileEntity(); + if (tileEntity instanceof TileEntitySemiManualBase) { + TileEntitySemiManualBase baseTE = (TileEntitySemiManualBase) tileEntity; + tooltip.add(I18n.format("hwyla.power_consumed", (int)baseTE.getTopTEntity().getPower()+".0 R")); + } + else if (tileEntity instanceof TileEntitySemiManualTopBase) { + TileEntitySemiManualTopBase topTe = (TileEntitySemiManualTopBase) tileEntity; + tooltip.add(I18n.format("hwyla.power_consumed", (int)topTe.getPower()+".0 R")); + } + return tooltip; + } +} diff --git a/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbine.java b/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbine.java index af771979..159e0d7b 100644 --- a/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbine.java +++ b/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbine.java @@ -12,6 +12,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.common.capabilities.Capability; import software.bernie.geckolib3.core.IAnimatable; import software.bernie.geckolib3.core.PlayState; @@ -197,4 +198,9 @@ private PlayState rotation(AnimationEvent event) { public AnimationFactory getFactory() { return this.factory; } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(this.getPos().add(-1, -1, -1), this.getPos().add(1, 2, 1)); + } } diff --git a/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbinePart.java b/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbinePart.java index 4e694508..d450f522 100644 --- a/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbinePart.java +++ b/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntityBlowPoweredTurbinePart.java @@ -21,6 +21,10 @@ public void setCenterBlockPos(BlockPos centerBlockPos) { } } + public TileEntityBlowPoweredTurbine getTurbine() { + return (TileEntityBlowPoweredTurbine) this.world.getTileEntity(this.getCenterBlockPos()); + } + @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); @@ -36,6 +40,11 @@ public void readFromNBT(NBTTagCompound compound) { this.centerBlockPos = new BlockPos(compound.getInteger("centerPosX"), compound.getInteger("centerPosY"), compound.getInteger("centerPosZ")); } + @Override + public NBTTagCompound getUpdateTag() { + return this.writeToNBT(new NBTTagCompound()); + } + @Override public void handleUpdateTag(NBTTagCompound tag) { this.centerBlockPos = new BlockPos(tag.getInteger("centerPosX"), tag.getInteger("centerPosY"), tag.getInteger("centerPosZ")); diff --git a/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntitySemiManualPresser.java b/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntitySemiManualPresser.java index 4df7b009..66f3e6d5 100644 --- a/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntitySemiManualPresser.java +++ b/src/main/java/anightdazingzoroark/prift/compat/mysticalmechanics/tileentities/TileEntitySemiManualPresser.java @@ -1,12 +1,8 @@ package anightdazingzoroark.prift.compat.mysticalmechanics.tileentities; import anightdazingzoroark.prift.compat.mysticalmechanics.recipes.RiftMMRecipes; -import anightdazingzoroark.prift.compat.mysticalmechanics.recipes.SemiManualExtruderRecipe; import anightdazingzoroark.prift.compat.mysticalmechanics.recipes.SemiManualPresserRecipe; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; public class TileEntitySemiManualPresser extends TileEntitySemiManualBase { public TileEntitySemiManualPresser() { diff --git a/src/main/java/anightdazingzoroark/prift/server/ServerProxy.java b/src/main/java/anightdazingzoroark/prift/server/ServerProxy.java index f9486710..6f453f47 100644 --- a/src/main/java/anightdazingzoroark/prift/server/ServerProxy.java +++ b/src/main/java/anightdazingzoroark/prift/server/ServerProxy.java @@ -72,6 +72,7 @@ public void preInit(FMLPreInitializationEvent e) { RiftItems.registerItems(); RiftTileEntities.registerTileEntities(); RiftItems.registerOreDicTags(); + RiftBlocks.registerOreDicTags(); RiftRecipes.registerSmelting(); if (GeneralConfig.canUseMM()) RiftMMRecipes.registerRecipes(); RiftCrafttweaker.loadCrafttweakerCompat(); diff --git a/src/main/java/anightdazingzoroark/prift/server/blocks/RiftBlocks.java b/src/main/java/anightdazingzoroark/prift/server/blocks/RiftBlocks.java index 0a1171f8..a26ab7a7 100644 --- a/src/main/java/anightdazingzoroark/prift/server/blocks/RiftBlocks.java +++ b/src/main/java/anightdazingzoroark/prift/server/blocks/RiftBlocks.java @@ -14,6 +14,7 @@ import net.minecraftforge.fluids.BlockFluidClassic; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.registries.IForgeRegistry; import java.util.ArrayList; @@ -44,6 +45,11 @@ public static void registerBlocks() { if (GeneralConfig.canUseMM()) RiftMMBlocks.registerMMBlocks(); } + public static void registerOreDicTags() { + OreDictionary.registerOre("grass", RiftBlocks.PYROBERRY_BUSH); + OreDictionary.registerOre("grass", RiftBlocks.CRYOBERRY_BUSH); + } + public static Block registerBlock(Block block, String registryName, boolean includeItem) { return registerBlock(block, registryName, includeItem, true, true); } diff --git a/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftAttack.java b/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftAttack.java index 4eb7c652..ad60f544 100644 --- a/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftAttack.java +++ b/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftAttack.java @@ -142,27 +142,29 @@ protected void checkAndPerformAttack(EntityLivingBase enemy, double distToEnemyS if (--this.attackCooldown <= 0) { if (distToEnemySqr <= d0) this.attacker.setAttacking(true); - if (this.animTime == 0) this.attacker.removeSpeed(); - this.animTime++; - if (this.animTime == this.attackAnimTime) { - if (distToEnemySqr <= d0) this.attacker.attackEntityAsMob(enemy); - } - if (this.animTime > this.attackAnimLength + 1) { - this.animTime = 0; - this.attacker.setAttacking(false); - this.attackCooldown = 20; - this.attacker.resetSpeed(); - if (this.attacker.isTamed()) this.attacker.energyActionMod++; + if (this.attacker.isAttacking()) { + this.animTime++; + if (this.animTime == this.attackAnimTime) { + this.attacker.removeSpeed(); + if (distToEnemySqr <= d0) this.attacker.attackEntityAsMob(enemy); + } + if (this.animTime > this.attackAnimLength + 1) { + this.animTime = 0; + this.attacker.setAttacking(false); + this.attackCooldown = 20; + this.attacker.resetSpeed(); + if (this.attacker.isTamed()) this.attacker.energyActionMod++; + } } } } protected double getAttackReachSqr(EntityLivingBase attackTarget) { - return (double)(this.attacker.attackWidth * this.attacker.attackWidth + attackTarget.width); + return (this.attacker.attackWidth * this.attacker.attackWidth + attackTarget.width); } protected double getRangedAttackReachSqr(EntityLivingBase attackTarget) { - if (this.attacker instanceof IRangedAttackMob) return (double)(this.attacker.rangedWidth * this.attacker.rangedWidth + attackTarget.width); + if (this.attacker instanceof IRangedAttackMob) return (double)(this.attacker.rangedWidth * this.attacker.rangedWidth + attackTarget.width + 25); return 0; } diff --git a/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftChargeAttack.java b/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftChargeAttack.java index 739b1efb..b152d16a 100644 --- a/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftChargeAttack.java +++ b/src/main/java/anightdazingzoroark/prift/server/entity/ai/RiftChargeAttack.java @@ -53,6 +53,9 @@ public boolean shouldExecute() { else if (!entitylivingbase.isEntityAlive()) return false; else { double d0 = this.attacker.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); + System.out.println("min charge: "+this.getAttackReachSqr(entitylivingbase)); + System.out.println("target dist: "+d0); + System.out.println("max charge: "+this.getChargeAttackReachSqr(entitylivingbase)); return this.attacker.getEnergy() > 6 && d0 > this.getAttackReachSqr(entitylivingbase) && d0 <= this.getChargeAttackReachSqr(entitylivingbase) && !this.attacker.isInWater(); } } @@ -198,7 +201,7 @@ else if (entity instanceof RiftCreaturePart) { } protected double getAttackReachSqr(EntityLivingBase attackTarget) { - return (double)(this.attacker.attackWidth * this.attacker.attackWidth + attackTarget.width); + return (double)(this.attacker.attackWidth * this.attacker.attackWidth + attackTarget.width + 25); } protected double getChargeAttackReachSqr(EntityLivingBase attackTarget) { diff --git a/src/main/java/anightdazingzoroark/prift/server/entity/creature/Parasaurolophus.java b/src/main/java/anightdazingzoroark/prift/server/entity/creature/Parasaurolophus.java index e60deb04..205515fd 100644 --- a/src/main/java/anightdazingzoroark/prift/server/entity/creature/Parasaurolophus.java +++ b/src/main/java/anightdazingzoroark/prift/server/entity/creature/Parasaurolophus.java @@ -100,7 +100,7 @@ protected void initEntityAI() { this.targetTasks.addTask(2, new RiftProtectOwner(this)); this.targetTasks.addTask(3, new RiftAttackForOwner(this)); this.tasks.addTask(0, new RiftParasaurStokeCombustor(this)); - this.tasks.addTask(0, new RiftBlowIntoTurbine(this, 10f, 1.76f, 0.24f)); + this.tasks.addTask(0, new RiftBlowIntoTurbine(this, 64f, 1.76f, 0.24f)); this.tasks.addTask(0, new RiftUseLeadPoweredCrank(this)); this.tasks.addTask(1, new RiftMate(this)); this.tasks.addTask(2, new RiftLandDwellerSwim(this)); diff --git a/src/main/java/anightdazingzoroark/prift/server/entity/creature/RiftCreature.java b/src/main/java/anightdazingzoroark/prift/server/entity/creature/RiftCreature.java index a737a050..32290f21 100644 --- a/src/main/java/anightdazingzoroark/prift/server/entity/creature/RiftCreature.java +++ b/src/main/java/anightdazingzoroark/prift/server/entity/creature/RiftCreature.java @@ -642,7 +642,6 @@ public String getName(boolean includeLevel) { else { String s = EntityList.getEntityString(this); if (s == null) s = "generic"; - //new TextComponentTranslation("tametrait.level", this.getLevel()).getFormattedText() return new TextComponentTranslation("entity." + s + ".name").getFormattedText() + (includeLevel ? " ("+ new TextComponentTranslation("tametrait.level", this.getLevel()).getFormattedText()+")" : ""); } } @@ -1708,7 +1707,7 @@ public int slotCount() { } public void updatePassenger(Entity passenger) { - if (this.canBeSteered()) { + if (this.canBeSteered() && !this.isCharging()) { this.rotationYaw = passenger.rotationYaw; this.prevRotationYaw = this.rotationYaw; this.rotationPitch = passenger.rotationPitch * 0.5f; @@ -1868,11 +1867,13 @@ public void travel(float strafe, float vertical, float forward) { if (this.isSaddled() && this.isBeingRidden() && this.canBeSteered()) { EntityLivingBase controller = (EntityLivingBase)this.getControllingPassenger(); if (controller != null) { - this.rotationYaw = controller.rotationYaw; - this.prevRotationYaw = this.rotationYaw; - this.rotationPitch = controller.rotationPitch * 0.5f; - this.setRotation(this.rotationYaw, this.rotationPitch); - this.renderYawOffset = this.rotationYaw; + if (!this.isCharging()) { + this.rotationYaw = controller.rotationYaw; + this.prevRotationYaw = this.rotationYaw; + this.rotationPitch = controller.rotationPitch * 0.5f; + this.setRotation(this.rotationYaw, this.rotationPitch); + this.renderYawOffset = this.rotationYaw; + } strafe = controller.moveStrafing * 0.5f; forward = controller.moveForward; this.stepHeight = 1.0F; diff --git a/src/main/java/anightdazingzoroark/prift/server/entity/creature/Tyrannosaurus.java b/src/main/java/anightdazingzoroark/prift/server/entity/creature/Tyrannosaurus.java index 1e58aa1c..5a762f8f 100644 --- a/src/main/java/anightdazingzoroark/prift/server/entity/creature/Tyrannosaurus.java +++ b/src/main/java/anightdazingzoroark/prift/server/entity/creature/Tyrannosaurus.java @@ -176,7 +176,7 @@ protected void initEntityAI() { this.targetTasks.addTask(2, new RiftProtectOwner(this)); this.targetTasks.addTask(3, new RiftPickUpFavoriteFoods(this,true)); this.targetTasks.addTask(3, new RiftAttackForOwner(this)); - this.tasks.addTask(0, new RiftBlowIntoTurbine(this, 30f, 2.08f, 0.64f)); + this.tasks.addTask(0, new RiftBlowIntoTurbine(this, 180f, 2.08f, 0.64f)); this.tasks.addTask(1, new RiftLandDwellerSwim(this)); this.tasks.addTask(2, new RiftMate(this)); this.tasks.addTask(3, new RiftResetAnimatedPose(this, 1.68F, 1)); diff --git a/src/main/java/anightdazingzoroark/prift/server/entity/interfaces/IImpregnable.java b/src/main/java/anightdazingzoroark/prift/server/entity/interfaces/IImpregnable.java index c23af019..b6add510 100644 --- a/src/main/java/anightdazingzoroark/prift/server/entity/interfaces/IImpregnable.java +++ b/src/main/java/anightdazingzoroark/prift/server/entity/interfaces/IImpregnable.java @@ -26,7 +26,7 @@ default void createBaby(T parent) { baby.setLocationAndAngles(parent.posX, parent.posY, parent.posZ, 0.0F, 0.0F); parent.world.spawnEntity(baby); this.setPregnant(false, 0); - ((EntityPlayer)parent.getOwner()).sendStatusMessage(new TextComponentTranslation("prift.notify.baby_birthed", new TextComponentString(parent.getName())), false); + if (parent.getOwner() != null) ((EntityPlayer)parent.getOwner()).sendStatusMessage(new TextComponentTranslation("prift.notify.baby_birthed", new TextComponentString(parent.getName())), false); } } } diff --git a/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientBucketFluid.java b/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientBucketFluid.java index e6fad41d..7dbee828 100644 --- a/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientBucketFluid.java +++ b/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientBucketFluid.java @@ -1,6 +1,5 @@ package anightdazingzoroark.prift.server.recipes; -import com.codetaylor.mc.athenaeum.recipe.IngredientFluidStack; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import net.minecraft.item.ItemStack; @@ -76,7 +75,7 @@ public Ingredient parse(JsonContext context, JsonObject json) { throw new JsonSyntaxException("Fluid with name " + name + " could not be found"); } - return new IngredientFluidStack(fluid, amount); + return new RiftIngredientFluidStack(fluid, amount); } } } diff --git a/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientFluidStack.java b/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientFluidStack.java new file mode 100644 index 00000000..3815567f --- /dev/null +++ b/src/main/java/anightdazingzoroark/prift/server/recipes/RiftIngredientFluidStack.java @@ -0,0 +1,81 @@ +package anightdazingzoroark.prift.server.recipes; + +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.common.crafting.IIngredientFactory; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class RiftIngredientFluidStack extends Ingredient { + private final FluidStack fluid; + private ItemStack[] cachedStacks; + + public RiftIngredientFluidStack(FluidStack fluid) { + + super(0); + this.fluid = fluid; + } + + public RiftIngredientFluidStack(Fluid fluid, int amount) { + + this(new FluidStack(fluid, amount)); + } + + public FluidStack getFluid() { + + return fluid; + } + + @Nonnull + @Override + public ItemStack[] getMatchingStacks() { + + if (this.cachedStacks == null) { + this.cachedStacks = new ItemStack[]{FluidUtil.getFilledBucket(this.fluid)}; + } + return this.cachedStacks; + } + + @Override + public boolean apply(@Nullable ItemStack stack) { + + if (stack == null) { + return false; + + } else { + FluidStack fs = FluidUtil.getFluidContained(stack); + return fs == null + && this.fluid == null + || fs != null + && fs.containsFluid(fluid); + } + } + + public static class Factory + implements IIngredientFactory { + + @Nonnull + @Override + public Ingredient parse(JsonContext context, JsonObject json) { + + String name = JsonUtils.getString(json, "fluid"); + int amount = JsonUtils.getInt(json, "amount", 1000); + Fluid fluid = FluidRegistry.getFluid(name); + + if (fluid == null) { + throw new JsonSyntaxException("Fluid with name " + name + " could not be found"); + } + + return new RiftIngredientFluidStack(fluid, amount); + } + } +} diff --git a/src/main/resources/assets/prift/lang/en_us.lang b/src/main/resources/assets/prift/lang/en_us.lang index d2803dbc..83bb4ab7 100644 --- a/src/main/resources/assets/prift/lang/en_us.lang +++ b/src/main/resources/assets/prift/lang/en_us.lang @@ -304,4 +304,8 @@ tile.feeding_trough.name=Feeding Trough tile.semi_manual_extractor.name=Semi Automatic Extractor tile.semi_manual_presser.name=Semi Automatic Presser tile.semi_manual_extruder.name=Semi Automatic Extruder -tile.semi_manual_hammerer.name=Semi Automatic Hammerer \ No newline at end of file +tile.semi_manual_hammerer.name=Semi Automatic Hammerer + +hwyla.health=Health: %s / %s +hwyla.power_consumed=Power Consumed: %s +hwyla.power_created=Power Created: %s \ No newline at end of file diff --git a/src/main/resources/assets/prift/recipes/cryoberry_juice_bucket.json b/src/main/resources/assets/prift/recipes/cryoberry_juice_bucket.json new file mode 100644 index 00000000..0550dbda --- /dev/null +++ b/src/main/resources/assets/prift/recipes/cryoberry_juice_bucket.json @@ -0,0 +1,36 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [ + { + "item": "minecraft:bucket" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + }, + { + "item": "prift:cryoberry" + } + ], + "result": { + "item": "forge:bucketfilled", + "nbt": "{FluidName:\"cryoberry_juice\", Amount: 1000}" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/prift/recipes/pyroberry_juice_bucket.json b/src/main/resources/assets/prift/recipes/pyroberry_juice_bucket.json new file mode 100644 index 00000000..39e8e181 --- /dev/null +++ b/src/main/resources/assets/prift/recipes/pyroberry_juice_bucket.json @@ -0,0 +1,36 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [ + { + "item": "minecraft:bucket" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + }, + { + "item": "prift:pyroberry" + } + ], + "result": { + "item": "forge:bucketfilled", + "nbt": "{FluidName:\"pyroberry_juice\", Amount: 1000}" + } +} \ No newline at end of file