Fix wrench drop of LightningRod, SolarPanel, WaterMill and WindMill

This commit is contained in:
Ourten 2017-02-02 22:28:48 +01:00
parent eafc5c831d
commit 08087871a1
4 changed files with 188 additions and 67 deletions

View file

@ -1,17 +1,22 @@
package techreborn.tiles.generator; package techreborn.tiles.generator;
import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.IWrenchable;
import reborncore.common.blocks.BlockMachineBase; import reborncore.common.blocks.BlockMachineBase;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.config.ConfigTechReborn;
public class TileLightningRod extends TilePowerAcceptor { import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks;
public class TileLightningRod extends TilePowerAcceptor implements IWrenchable {
private int onStatusHoldTicks = -1; private int onStatusHoldTicks = -1;
@ -23,53 +28,53 @@ public class TileLightningRod extends TilePowerAcceptor {
public void update() { public void update() {
super.update(); super.update();
if (onStatusHoldTicks > 0) if (this.onStatusHoldTicks > 0)
--onStatusHoldTicks; --this.onStatusHoldTicks;
if (onStatusHoldTicks == 0 || getEnergy() <= 0) { if (this.onStatusHoldTicks == 0 || this.getEnergy() <= 0) {
if (getBlockType() instanceof BlockMachineBase) if (this.getBlockType() instanceof BlockMachineBase)
((BlockMachineBase) getBlockType()).setActive(false, world, pos); ((BlockMachineBase) this.getBlockType()).setActive(false, this.world, this.pos);
onStatusHoldTicks = -1; this.onStatusHoldTicks = -1;
} }
float weatherStrength = world.getThunderStrength(1.0F); final float weatherStrength = this.world.getThunderStrength(1.0F);
if (weatherStrength > 0.2F) { if (weatherStrength > 0.2F) {
//lightStrikeChance = (MAX - (CHANCE * WEATHER_STRENGTH) //lightStrikeChance = (MAX - (CHANCE * WEATHER_STRENGTH)
float lightStrikeChance = ((100F - ConfigTechReborn.LightningRodChance) * 20F); final float lightStrikeChance = (100F - ConfigTechReborn.LightningRodChance) * 20F;
float totalChance = lightStrikeChance * getLightningStrikeMultiplier() * ((1.1F - weatherStrength)); final float totalChance = lightStrikeChance * this.getLightningStrikeMultiplier() * (1.1F - weatherStrength);
if (world.rand.nextInt((int) Math.floor(totalChance)) == 0) { if (this.world.rand.nextInt((int) Math.floor(totalChance)) == 0) {
EntityLightningBolt lightningBolt = new EntityLightningBolt(world, final EntityLightningBolt lightningBolt = new EntityLightningBolt(this.world,
pos.getX() + 0.5F, this.pos.getX() + 0.5F,
world.provider.getAverageGroundLevel(), this.world.provider.getAverageGroundLevel(),
pos.getZ() + 0.5F, false); this.pos.getZ() + 0.5F, false);
world.addWeatherEffect(lightningBolt); this.world.addWeatherEffect(lightningBolt);
world.spawnEntity(lightningBolt); this.world.spawnEntity(lightningBolt);
addEnergy(32768 * (0.3F + weatherStrength)); this.addEnergy(32768 * (0.3F + weatherStrength));
((BlockMachineBase) getBlockType()).setActive(true, world, pos); ((BlockMachineBase) this.getBlockType()).setActive(true, this.world, this.pos);
onStatusHoldTicks = 400; this.onStatusHoldTicks = 400;
} }
} }
} }
public float getLightningStrikeMultiplier() { public float getLightningStrikeMultiplier() {
float actualHeight = world.provider.getActualHeight(); final float actualHeight = this.world.provider.getActualHeight();
float groundLevel = world.provider.getAverageGroundLevel(); final float groundLevel = this.world.provider.getAverageGroundLevel();
for (int i = pos.getY() + 1; i < actualHeight; i++) { for (int i = this.pos.getY() + 1; i < actualHeight; i++) {
if (!isValidIronFence(i)) { if (!this.isValidIronFence(i)) {
if (groundLevel >= i) if (groundLevel >= i)
return 4.3F; return 4.3F;
float max = actualHeight - groundLevel; final float max = actualHeight - groundLevel;
float got = i - groundLevel; final float got = i - groundLevel;
return 1.2F - got / max; return 1.2F - got / max;
} }
} }
return 4F; return 4F;
} }
public boolean isValidIronFence(int y) { public boolean isValidIronFence(final int y) {
Item itemBlock = Item.getItemFromBlock(world.getBlockState(new BlockPos(pos.getX(), y, pos.getZ())).getBlock()); final Item itemBlock = Item.getItemFromBlock(this.world.getBlockState(new BlockPos(this.pos.getX(), y, this.pos.getZ())).getBlock());
for (ItemStack fence : OreDictionary.getOres("fenceIron")) { for (final ItemStack fence : OreDictionary.getOres("fenceIron")) {
if (fence.getItem() == itemBlock) if (fence.getItem() == itemBlock)
return true; return true;
} }
@ -82,13 +87,13 @@ public class TileLightningRod extends TilePowerAcceptor {
} }
@Override @Override
public boolean canAcceptEnergy(EnumFacing direction) { public boolean canAcceptEnergy(final EnumFacing direction) {
return false; return false;
} }
@Override @Override
public boolean canProvideEnergy(EnumFacing direction) { public boolean canProvideEnergy(final EnumFacing direction) {
return direction == getFacingEnum(); return direction == this.getFacingEnum();
} }
@Override @Override
@ -106,4 +111,28 @@ public class TileLightningRod extends TilePowerAcceptor {
return EnumPowerTier.HIGH; return EnumPowerTier.HIGH;
} }
@Override
public boolean wrenchCanSetFacing(final EntityPlayer entityPlayer, final EnumFacing side) {
return false;
}
@Override
public EnumFacing getFacing() {
return this.getFacingEnum();
}
@Override
public boolean wrenchCanRemove(final EntityPlayer entityPlayer) {
return entityPlayer.isSneaking();
}
@Override
public float getWrenchDropRate() {
return 1.0F;
}
@Override
public ItemStack getWrenchDrop(final EntityPlayer p0) {
return new ItemStack(ModBlocks.LIGHTNING_ROD);
}
} }

View file

@ -1,17 +1,22 @@
package techreborn.tiles.generator; package techreborn.tiles.generator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.IWrenchable;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.blocks.generator.BlockSolarPanel; import techreborn.blocks.generator.BlockSolarPanel;
import techreborn.init.ModBlocks;
import java.util.List; import java.util.List;
/** /**
* Created by modmuss50 on 25/02/2016. * Created by modmuss50 on 25/02/2016.
*/ */
public class TileSolarPanel extends TilePowerAcceptor implements ITickable { public class TileSolarPanel extends TilePowerAcceptor implements IWrenchable {
boolean shouldMakePower = false; boolean shouldMakePower = false;
boolean lastTickSate = false; boolean lastTickSate = false;
@ -25,25 +30,25 @@ public class TileSolarPanel extends TilePowerAcceptor implements ITickable {
@Override @Override
public void updateEntity() { public void updateEntity() {
super.updateEntity(); super.updateEntity();
if (!world.isRemote) { if (!this.world.isRemote) {
if (world.getTotalWorldTime() % 60 == 0) { if (this.world.getTotalWorldTime() % 60 == 0) {
shouldMakePower = isSunOut(); this.shouldMakePower = this.isSunOut();
} }
if (shouldMakePower) { if (this.shouldMakePower) {
powerToAdd = 10; this.powerToAdd = 10;
addEnergy(powerToAdd); this.addEnergy(this.powerToAdd);
} else { } else {
powerToAdd = 0; this.powerToAdd = 0;
} }
world.setBlockState(getPos(), this.world.setBlockState(this.getPos(),
world.getBlockState(this.getPos()).withProperty(BlockSolarPanel.ACTIVE, isSunOut())); this.world.getBlockState(this.getPos()).withProperty(BlockSolarPanel.ACTIVE, this.isSunOut()));
} }
} }
@Override @Override
public void addInfo(List<String> info, boolean isRealTile) { public void addInfo(final List<String> info, final boolean isRealTile) {
super.addInfo(info, isRealTile); super.addInfo(info, isRealTile);
if (isRealTile) { if (isRealTile) {
// FIXME: 25/02/2016 // FIXME: 25/02/2016
@ -54,8 +59,8 @@ public class TileSolarPanel extends TilePowerAcceptor implements ITickable {
} }
public boolean isSunOut() { public boolean isSunOut() {
return world.canBlockSeeSky(pos.up()) && !world.isRaining() && !world.isThundering() return this.world.canBlockSeeSky(this.pos.up()) && !this.world.isRaining() && !this.world.isThundering()
&& world.isDaytime(); && this.world.isDaytime();
} }
@Override @Override
@ -64,12 +69,12 @@ public class TileSolarPanel extends TilePowerAcceptor implements ITickable {
} }
@Override @Override
public boolean canAcceptEnergy(EnumFacing direction) { public boolean canAcceptEnergy(final EnumFacing direction) {
return false; return false;
} }
@Override @Override
public boolean canProvideEnergy(EnumFacing direction) { public boolean canProvideEnergy(final EnumFacing direction) {
return true; return true;
} }
@ -87,4 +92,29 @@ public class TileSolarPanel extends TilePowerAcceptor implements ITickable {
public EnumPowerTier getTier() { public EnumPowerTier getTier() {
return EnumPowerTier.LOW; return EnumPowerTier.LOW;
} }
@Override
public boolean wrenchCanSetFacing(final EntityPlayer entityPlayer, final EnumFacing side) {
return false;
}
@Override
public EnumFacing getFacing() {
return this.getFacingEnum();
}
@Override
public boolean wrenchCanRemove(final EntityPlayer entityPlayer) {
return entityPlayer.isSneaking();
}
@Override
public float getWrenchDropRate() {
return 1.0F;
}
@Override
public ItemStack getWrenchDrop(final EntityPlayer p0) {
return new ItemStack(ModBlocks.SOLAR_PANEL);
}
} }

View file

@ -1,14 +1,20 @@
package techreborn.tiles.generator; package techreborn.tiles.generator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.IWrenchable;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.init.ModBlocks;
/** /**
* Created by modmuss50 on 25/02/2016. * Created by modmuss50 on 25/02/2016.
*/ */
public class TileWaterMill extends TilePowerAcceptor { public class TileWaterMill extends TilePowerAcceptor implements IWrenchable {
int waterblocks = 0; int waterblocks = 0;
@ -19,19 +25,19 @@ public class TileWaterMill extends TilePowerAcceptor {
@Override @Override
public void updateEntity() { public void updateEntity() {
super.updateEntity(); super.updateEntity();
if (world.getTotalWorldTime() % 20 == 0) { if (this.world.getTotalWorldTime() % 20 == 0) {
checkForWater(); this.checkForWater();
} }
if (waterblocks > 0) { if (this.waterblocks > 0) {
addEnergy(waterblocks); this.addEnergy(this.waterblocks);
} }
} }
public void checkForWater() { public void checkForWater() {
waterblocks = 0; this.waterblocks = 0;
for (EnumFacing facing : EnumFacing.HORIZONTALS) { for (final EnumFacing facing : EnumFacing.HORIZONTALS) {
if (world.getBlockState(getPos().offset(facing)).getBlock() == Blocks.WATER) { if (this.world.getBlockState(this.getPos().offset(facing)).getBlock() == Blocks.WATER) {
waterblocks++; this.waterblocks++;
} }
} }
} }
@ -42,12 +48,12 @@ public class TileWaterMill extends TilePowerAcceptor {
} }
@Override @Override
public boolean canAcceptEnergy(EnumFacing direction) { public boolean canAcceptEnergy(final EnumFacing direction) {
return false; return false;
} }
@Override @Override
public boolean canProvideEnergy(EnumFacing direction) { public boolean canProvideEnergy(final EnumFacing direction) {
return true; return true;
} }
@ -65,4 +71,29 @@ public class TileWaterMill extends TilePowerAcceptor {
public EnumPowerTier getTier() { public EnumPowerTier getTier() {
return EnumPowerTier.LOW; return EnumPowerTier.LOW;
} }
@Override
public boolean wrenchCanSetFacing(final EntityPlayer entityPlayer, final EnumFacing side) {
return false;
}
@Override
public EnumFacing getFacing() {
return this.getFacingEnum();
}
@Override
public boolean wrenchCanRemove(final EntityPlayer entityPlayer) {
return entityPlayer.isSneaking();
}
@Override
public float getWrenchDropRate() {
return 1.0F;
}
@Override
public ItemStack getWrenchDrop(final EntityPlayer p0) {
return new ItemStack(ModBlocks.WATER_MILL);
}
} }

View file

@ -1,13 +1,19 @@
package techreborn.tiles.generator; package techreborn.tiles.generator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import reborncore.api.power.EnumPowerTier; import reborncore.api.power.EnumPowerTier;
import reborncore.common.IWrenchable;
import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.powerSystem.TilePowerAcceptor;
import techreborn.init.ModBlocks;
/** /**
* Created by modmuss50 on 25/02/2016. * Created by modmuss50 on 25/02/2016.
*/ */
public class TileWindMill extends TilePowerAcceptor { public class TileWindMill extends TilePowerAcceptor implements IWrenchable {
int basePower = 16; int basePower = 16;
@ -18,12 +24,12 @@ public class TileWindMill extends TilePowerAcceptor {
@Override @Override
public void updateEntity() { public void updateEntity() {
super.updateEntity(); super.updateEntity();
if (pos.getY() > 64) { if (this.pos.getY() > 64) {
int actualPower = basePower; int actualPower = this.basePower;
if (world.isThundering()) { if (this.world.isThundering()) {
actualPower *= 1.25; actualPower *= 1.25;
} }
addEnergy(actualPower); // Value taken from this.addEnergy(actualPower); // Value taken from
// http://wiki.industrial-craft.net/?title=Wind_Mill // http://wiki.industrial-craft.net/?title=Wind_Mill
// Not worth making more complicated // Not worth making more complicated
} }
@ -35,12 +41,12 @@ public class TileWindMill extends TilePowerAcceptor {
} }
@Override @Override
public boolean canAcceptEnergy(EnumFacing direction) { public boolean canAcceptEnergy(final EnumFacing direction) {
return false; return false;
} }
@Override @Override
public boolean canProvideEnergy(EnumFacing direction) { public boolean canProvideEnergy(final EnumFacing direction) {
return true; return true;
} }
@ -58,4 +64,29 @@ public class TileWindMill extends TilePowerAcceptor {
public EnumPowerTier getTier() { public EnumPowerTier getTier() {
return EnumPowerTier.LOW; return EnumPowerTier.LOW;
} }
@Override
public boolean wrenchCanSetFacing(final EntityPlayer entityPlayer, final EnumFacing side) {
return false;
}
@Override
public EnumFacing getFacing() {
return this.getFacingEnum();
}
@Override
public boolean wrenchCanRemove(final EntityPlayer entityPlayer) {
return entityPlayer.isSneaking();
}
@Override
public float getWrenchDropRate() {
return 1.0F;
}
@Override
public ItemStack getWrenchDrop(final EntityPlayer p0) {
return new ItemStack(ModBlocks.WIND_MILL);
}
} }