Compare commits

...
7 Commits
14 changed files with 284 additions and 163 deletions

No files matched your search

+16 -16
View File
@@ -2,23 +2,23 @@
dependencies {
api('com.github.GTNewHorizons:EnderCore:0.5.0:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:ForestryMC:4.10.17:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.8.19-GTNH:dev')
api("com.github.GTNewHorizons:GTNHLib:0.7.0:dev")
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.45:dev')
compileOnly('com.github.GTNewHorizons:ForestryMC:4.11.2:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.8.40-GTNH:dev')
api("com.github.GTNewHorizons:GTNHLib:0.8.27:dev")
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.47:dev')
api('curse.maven:cofh-lib-220333:2388748') // https://www.curseforge.com/minecraft/mc-mods/cofh-lib/files/2388748
shadowImplementation('cglib:cglib-nodep:3.3.0')
api("com.github.GTNewHorizons:TinkersConstruct:1.14.6-GTNH:dev")
api("com.github.GTNewHorizons:TinkersConstruct:1.14.14-GTNH:dev")
compileOnly('com.github.GTNewHorizons:waila:1.9.2:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-717-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.1-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.60:dev') {transitive = false}
compileOnly("com.github.GTNewHorizons:ModularUI2:2.3.4-1.7.10:dev") {transitive = false}
compileOnly('com.github.GTNewHorizons:Railcraft:9.17.0:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:2.2.0-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Chisel:2.17.0-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:OpenComputers:1.12.2-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:waila:1.9.15:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-752-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.4-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.138:dev') {transitive = false}
compileOnly("com.github.GTNewHorizons:ModularUI2:2.3.22-1.7.10:dev") {transitive = false}
compileOnly('com.github.GTNewHorizons:Railcraft:9.17.6:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:2.2.4-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Chisel:2.17.7-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:OpenComputers:1.12.6-GTNH:api') {transitive = false}
compileOnly('curse.maven:minefactory-reloaded-66672:2366150') // https://www.curseforge.com/minecraft/mc-mods/minefactory-reloaded/files/2366150
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')
compileOnly('curse.maven:ee3-65509:2305023') // https://www.curseforge.com/minecraft/mc-mods/ee3/files/2305023
@@ -26,6 +26,6 @@ dependencies {
compileOnly(rfg.deobf('curse.maven:mekanism-268560:2475797')) // https://www.curseforge.com/minecraft/mc-mods/mekanism/files/2475797
compileOnly(rfg.deobf('maven.modrinth:immibis-microblocks:59.1.2')) // https://modrinth.com/mod/immibis-microblocks/version/59.1.2
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta62:api') {transitive = false}
compileOnly("com.github.GTNewHorizons:Hodgepodge:2.7.3:dev")
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta68:api') {transitive = false}
compileOnly("com.github.GTNewHorizons:Hodgepodge:2.7.23:dev")
}
+9 -1
View File
@@ -96,7 +96,9 @@ usesMixinDebug = false
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
mixinPlugin =
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
# Specify the package that contains all of your Mixins. The package must exist or
# the build will fail. If you have a package property defined in your mixins.<modid>.json,
# it must match with this or the build will fail.
mixinsPackage =
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
@@ -172,6 +174,12 @@ curseForgeRelations =
# projects. New projects should not use this parameter.
# customArchiveBaseName =
# Optional parameter to customize the default working directory used by the runClient* tasks. Relative to the project directory.
# runClientWorkingDirectory = run/client
# Optional parameter to customize the default working directory used by the runServer* tasks. Relative to the project directory.
# runServerWorkingDirectory = run/server
# Optional parameter to have the build automatically fail if an illegal version is used.
# This can be useful if you e.g. only want to allow versions in the form of '1.1.xxx'.
# The check is ONLY performed if the version is a git tag.
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+2 -2
View File
@@ -114,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
Vendored
+2 -2
View File
@@ -70,11 +70,11 @@ goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
+1 -1
View File
@@ -17,7 +17,7 @@ pluginManagement {
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.44'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.48'
}
@@ -1,7 +1,5 @@
package crazypants.enderio;
import java.text.DecimalFormat;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
@@ -21,15 +19,15 @@ import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.render.ConduitRenderer;
import crazypants.enderio.machine.hypercube.HyperCubeRegister;
import crazypants.enderio.machine.transceiver.ServerChannelRegister;
import crazypants.enderio.machine.wireless.WirelessChargerController;
public class CommonProxy {
private static final DecimalFormat FORMAT = new DecimalFormat("########0.000");
protected long serverTickCount = 0;
protected long clientTickCount = 0;
protected final TickTimer tickTimer = new TickTimer();
public ConduitNetworkTickHandler conduitNetworkTickHandler = null;
public WirelessChargerController wirelessChargerController = null;
public CommonProxy() {}
@@ -86,6 +84,8 @@ public class CommonProxy {
public void onServerAboutToStart(FMLServerAboutToStartEvent event) {
conduitNetworkTickHandler = new ConduitNetworkTickHandler();
FMLCommonHandler.instance().bus().register(conduitNetworkTickHandler);
wirelessChargerController = new WirelessChargerController();
FMLCommonHandler.instance().bus().register(wirelessChargerController);
}
public void onServerStarted(FMLServerStartedEvent event) {
@@ -97,6 +97,8 @@ public class CommonProxy {
HyperCubeRegister.unload();
FMLCommonHandler.instance().bus().unregister(conduitNetworkTickHandler);
conduitNetworkTickHandler = null;
FMLCommonHandler.instance().bus().unregister(wirelessChargerController);
wirelessChargerController = null;
}
public final class TickTimer {
@@ -1,19 +1,21 @@
package crazypants.enderio.machine.farm;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
import javax.annotation.Nonnull;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemShears;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.EnumSkyBlock;
@@ -31,7 +33,6 @@ import crazypants.enderio.ModObject;
import crazypants.enderio.config.Config;
import crazypants.enderio.machine.AbstractPoweredTaskEntity;
import crazypants.enderio.machine.ContinuousTask;
import crazypants.enderio.machine.IMachineRecipe.ResultStack;
import crazypants.enderio.machine.IPoweredTask;
import crazypants.enderio.machine.SlotDefinition;
import crazypants.enderio.machine.farm.farmers.FarmersCommune;
@@ -48,6 +49,8 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
private static final int TICKS_PER_WORK = 20;
private boolean showingRange;
private final List<ItemStack> harvestBuffer = new ArrayList<>();
@Override
public World getWorld() {
return worldObj;
@@ -424,6 +427,38 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
wasActive = isActive();
worldObj.updateLightByType(EnumSkyBlock.Block, xCoord, yCoord, zCoord);
}
tryMoveFromBuffer();
}
private void tryMoveFromBuffer() {
if (harvestBuffer.isEmpty() || worldObj.isRemote) {
return;
}
List<ItemStack> toRemove = new ArrayList<>();
for (ItemStack stack : harvestBuffer) {
if (stack == null || stack.stackSize <= 0) {
toRemove.add(stack);
continue;
}
ItemStack remaining = tryInsertToInputSlots(stack);
if (remaining != null && remaining.stackSize > 0) {
remaining = tryInsertToOutputSlots(remaining);
}
if (remaining == null || remaining.stackSize == 0) {
toRemove.add(stack);
} else {
stack.stackSize = remaining.stackSize;
}
}
harvestBuffer.removeAll(toRemove);
if (!toRemove.isEmpty()) {
markDirty();
}
}
@Override
@@ -445,9 +480,18 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
setNotification("noPower");
return false;
}
if (isBufferNotEmpty() || isOutputFull()) {
setNotification("outputFull");
return false;
}
return true;
}
private boolean isBufferNotEmpty() {
return !harvestBuffer.isEmpty();
}
protected void doTick() {
if (sendNotification && shouldDoWorkThisTick(TICKS_PER_WORK)) {
@@ -488,7 +532,7 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
block = worldObj.getBlock(bc.x, bc.y, bc.z);
}
if (isOutputFull()) {
if (isOutputFull() || isBufferNotEmpty()) {
setNotification("outputFull");
return;
}
@@ -507,10 +551,8 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
new TargetPoint(worldObj.provider.dimensionId, bc.x, bc.y, bc.z, Config.farmParticlesMaxRange));
for (EntityItem ei : harvest.getDrops()) {
if (ei != null) {
insertHarvestDrop(ei, bc);
if (!ei.isDead) {
worldObj.spawnEntityInWorld(ei);
}
addToBuffer(ei.getEntityItem().copy());
ei.setDead();
}
}
return;
@@ -552,6 +594,99 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
}
}
private void addToBuffer(ItemStack stack) {
if (stack == null || stack.stackSize <= 0) {
return;
}
for (ItemStack bufStack : harvestBuffer) {
if (bufStack.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(bufStack, stack)) {
int canAdd = bufStack.stackSize;
if (canAdd > 0) {
int addAmount = Math.min(canAdd, stack.stackSize);
bufStack.stackSize += addAmount;
stack.stackSize -= addAmount;
if (stack.stackSize <= 0) {
markDirty();
return;
}
}
}
}
harvestBuffer.add(stack.copy());
markDirty();
}
private ItemStack tryInsertToInputSlots(ItemStack stack) {
if (stack == null || stack.stackSize <= 0) {
return stack;
}
for (int i = minSupSlot; i <= maxSupSlot; i++) {
if (stack.stackSize <= 0) {
break;
}
ItemStack slotStack = inventory[i];
int stackLimit = getInventoryStackLimit(i);
if (isItemValidForSlot(i, stack)) {
if (slotStack == null) {
if (!isSlotLocked(i) || (inventory[i] != null && inventory[i].isItemEqual(stack))) {
int amount = Math.min(stack.stackSize, stackLimit);
inventory[i] = stack.copy();
inventory[i].stackSize = amount;
stack.stackSize -= amount;
markDirty();
}
} else if (slotStack.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(slotStack, stack)) {
int canAdd = Math.min(stackLimit - slotStack.stackSize, stack.stackSize);
if (canAdd > 0) {
slotStack.stackSize += canAdd;
stack.stackSize -= canAdd;
markDirty();
}
}
}
}
return stack.stackSize > 0 ? stack : null;
}
private ItemStack tryInsertToOutputSlots(ItemStack stack) {
if (stack == null || stack.stackSize <= 0) {
return stack;
}
for (int i = slotDefinition.minOutputSlot; i <= slotDefinition.maxOutputSlot; i++) {
if (stack.stackSize <= 0) {
break;
}
ItemStack slotStack = inventory[i];
int stackLimit = 64;
if (slotStack == null) {
int amount = Math.min(stack.stackSize, stackLimit);
inventory[i] = stack.copy();
inventory[i].stackSize = amount;
stack.stackSize -= amount;
markDirty();
} else if (slotStack.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(slotStack, stack)) {
int canAdd = Math.min(stackLimit - slotStack.stackSize, stack.stackSize);
if (canAdd > 0) {
slotStack.stackSize += canAdd;
stack.stackSize -= canAdd;
markDirty();
}
}
}
return stack.stackSize > 0 ? stack : null;
}
private int bonemealCooldown = 5; // no need to persist this
private boolean hasBonemeal() {
@@ -652,68 +787,6 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
return minSupSlot + 3;
}
private void insertHarvestDrop(Entity entity, BlockCoord bc) {
if (!worldObj.isRemote) {
if (entity instanceof EntityItem && !entity.isDead) {
EntityItem item = (EntityItem) entity;
ItemStack stack = item.getEntityItem().copy();
int numInserted = insertResult(stack, bc);
stack.stackSize -= numInserted;
item.setEntityItemStack(stack);
if (stack.stackSize == 0) {
item.setDead();
}
}
}
}
private int insertResult(ItemStack stack, BlockCoord bc) {
int slot = bc != null ? getSupplySlotForCoord(bc) : minSupSlot;
int[] slots = new int[NUM_SUPPLY_SLOTS];
int k = 0;
for (int j = slot; j <= maxSupSlot; j++) {
slots[k++] = j;
}
for (int j = minSupSlot; j < slot; j++) {
slots[k++] = j;
}
int origSize = stack.stackSize;
stack = stack.copy();
int inserted = 0;
for (int j = 0; j < slots.length && inserted < stack.stackSize; j++) {
int i = slots[j];
ItemStack curStack = inventory[i];
int inventoryStackLimit = getInventoryStackLimit(i);
if (isItemValidForSlot(i, stack) && (curStack == null || curStack.stackSize < inventoryStackLimit)) {
if (curStack == null) {
if (stack.stackSize < inventoryStackLimit) {
inventory[i] = stack.copy();
inserted = stack.stackSize;
} else {
inventory[i] = stack.copy();
inserted = inventoryStackLimit;
inventory[i].stackSize = inserted;
}
} else if (curStack.isItemEqual(stack)) {
inserted = Math.min(inventoryStackLimit - curStack.stackSize, stack.stackSize);
inventory[i].stackSize += inserted;
}
}
}
stack.stackSize -= inserted;
if (inserted >= origSize) {
return origSize;
}
ResultStack[] in = new ResultStack[] { new ResultStack(stack) };
mergeResults(in);
return origSize - (in[0].item == null ? 0 : in[0].item.stackSize);
}
private @Nonnull BlockCoord getNextCoord() {
int size = getFarmSize();
@@ -752,11 +825,6 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
return EnderIO.blockFarmStation.getLocalizedName();
}
@Override
public boolean hasCustomInventoryName() {
return false;
}
@Override
public String getMachineName() {
return ModObject.blockFarmStation.unlocalisedName;
@@ -811,6 +879,17 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
} else if (slotLayoutVersion == 2) {
inventory = (new ArrayMappingTool<ItemStack>("TTTSSSSOOOOOOC", "TTTBBSSSSOOOOOOC")).map(inventory);
}
if (nbtRoot.hasKey("HarvestBuffer")) {
NBTTagList bufferList = nbtRoot.getTagList("HarvestBuffer", 10);
for (int i = 0; i < bufferList.tagCount(); i++) {
NBTTagCompound itemTag = bufferList.getCompoundTagAt(i);
ItemStack stack = ItemStack.loadItemStackFromNBT(itemTag);
if (stack != null && stack.stackSize > 0) {
harvestBuffer.add(stack);
}
}
}
}
IPoweredTask createTask() {
@@ -834,6 +913,18 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
nbtRoot.setIntArray("lockedSlots", locked);
}
nbtRoot.setInteger("slotLayoutVersion", 3);
if (!harvestBuffer.isEmpty()) {
NBTTagList bufferList = new NBTTagList();
for (ItemStack stack : harvestBuffer) {
if (stack != null && stack.stackSize > 0) {
NBTTagCompound itemTag = new NBTTagCompound();
stack.writeToNBT(itemTag);
bufferList.appendTag(itemTag);
}
}
nbtRoot.setTag("HarvestBuffer", bufferList);
}
}
@Override
@@ -6,6 +6,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyContainerItem;
import crazypants.enderio.EnderIO;
import crazypants.enderio.TileEntityEio;
import crazypants.enderio.network.PacketHandler;
import crazypants.enderio.power.IInternalPowerReceiver;
@@ -28,7 +29,7 @@ public class TileWirelessCharger extends TileEntityEio implements IInternalPower
@Override
public void invalidate() {
super.invalidate();
WirelessChargerController.instance.deregisterCharger(this);
EnderIO.proxy.wirelessChargerController.deregisterCharger(this);
registered = false;
}
@@ -40,7 +41,7 @@ public class TileWirelessCharger extends TileEntityEio implements IInternalPower
}
if (!registered) {
WirelessChargerController.instance.registerCharger(this);
EnderIO.proxy.wirelessChargerController.registerCharger(this);
registered = true;
}
@@ -1,8 +1,6 @@
package crazypants.enderio.machine.wireless;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import net.minecraft.item.ItemStack;
@@ -10,6 +8,8 @@ import net.minecraft.tileentity.TileEntity;
import com.enderio.core.common.util.BlockCoord;
import crazypants.enderio.EnderIO;
public class WirelessChargedLocation {
private final TileEntity te;
@@ -18,34 +18,30 @@ public class WirelessChargedLocation {
public WirelessChargedLocation(TileEntity te) {
this.te = te;
this.chargers = new ArrayList<IWirelessCharger>();
this.chargers = new ArrayList<>();
/*
* Set lastChangeCount to one less than the current change count so that the charger list is updated on first
* use (unless ~4B changes happen in between). Do this instead directly updating so that WirelessChargedLocation
* can be used while the TileEntity is still in construction (or loading).
*/
this.lastChangeCount = WirelessChargerController.instance.getChangeCount() - 1;
this.lastChangeCount = EnderIO.proxy.wirelessChargerController.getChangeCount() - 1;
}
private void updateChargers() {
WirelessChargerController wcc = WirelessChargerController.instance;
WirelessChargerController wcc = EnderIO.proxy.wirelessChargerController;
chargers.clear();
lastChangeCount = wcc.getChangeCount();
final BlockCoord bc = new BlockCoord(te);
wcc.getChargers(te.getWorldObj(), bc, chargers);
Collections.sort(chargers, new Comparator<IWirelessCharger>() {
@Override
public int compare(IWirelessCharger o1, IWirelessCharger o2) {
int dist1 = o1.getLocation().getDistSq(bc);
int dist2 = o2.getLocation().getDistSq(bc);
return dist1 - dist2;
}
chargers.sort((o1, o2) -> {
int dist1 = o1.getLocation().getDistSq(bc);
int dist2 = o2.getLocation().getDistSq(bc);
return dist1 - dist2;
});
}
private void checkChangeCount() {
if (lastChangeCount != WirelessChargerController.instance.getChangeCount()) {
if (lastChangeCount != EnderIO.proxy.wirelessChargerController.getChangeCount()) {
updateChargers();
}
}
@@ -8,11 +8,9 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
@@ -21,20 +19,17 @@ import crazypants.util.BaublesUtil;
public class WirelessChargerController {
public static WirelessChargerController instance = new WirelessChargerController();
public static final int RANGE = Config.wirelessChargerRange;
public static final int RANGE_SQ = RANGE * RANGE;
static {
FMLCommonHandler.instance().bus().register(WirelessChargerController.instance);
MinecraftForge.EVENT_BUS.register(WirelessChargerController.instance);
}
private static final int RANGE = Config.wirelessChargerRange;
private static final int RANGE_SQ = RANGE * RANGE;
private final Map<Integer, Map<BlockCoord, IWirelessCharger>> perWorldChargers = new HashMap<Integer, Map<BlockCoord, IWirelessCharger>>();
private int changeCount;
private WirelessChargerController() {}
@SubscribeEvent
public void onPlayerTick(TickEvent.PlayerTickEvent event) {
if (event.side != Side.CLIENT && event.phase == TickEvent.Phase.END) {
chargePlayersItems(event.player);
}
}
public void registerCharger(IWirelessCharger charger) {
if (charger == null) {
@@ -54,28 +49,7 @@ public class WirelessChargerController {
changeCount++;
}
@SubscribeEvent
public void onPlayerTick(TickEvent.PlayerTickEvent event) {
if (event.side == Side.CLIENT || event.phase != TickEvent.Phase.END) {
return;
}
chargePlayersItems(event.player);
}
public int getChangeCount() {
return changeCount;
}
public void getChargers(World world, BlockCoord bc, Collection<IWirelessCharger> res) {
Map<BlockCoord, IWirelessCharger> chargers = getChargersForWorld(world);
for (IWirelessCharger wc : chargers.values()) {
if (wc.getLocation().getDistSq(bc) <= RANGE_SQ) {
res.add(wc);
}
}
}
public void chargePlayersItems(EntityPlayer player) {
private void chargePlayersItems(EntityPlayer player) {
Map<BlockCoord, IWirelessCharger> chargers = getChargersForWorld(player.worldObj);
if (chargers.isEmpty()) {
return;
@@ -108,13 +82,21 @@ public class WirelessChargerController {
return res;
}
private Map<BlockCoord, IWirelessCharger> getChargersForWorld(World world) {
Map<BlockCoord, IWirelessCharger> res = perWorldChargers.get(world.provider.dimensionId);
if (res == null) {
res = new HashMap<BlockCoord, IWirelessCharger>();
perWorldChargers.put(world.provider.dimensionId, res);
public int getChangeCount() {
return changeCount;
}
public void getChargers(World world, BlockCoord bc, Collection<IWirelessCharger> res) {
Map<BlockCoord, IWirelessCharger> chargers = getChargersForWorld(world);
for (IWirelessCharger wc : chargers.values()) {
if (wc.getLocation().getDistSq(bc) <= RANGE_SQ) {
res.add(wc);
}
}
return res;
}
private Map<BlockCoord, IWirelessCharger> getChargersForWorld(World world) {
return perWorldChargers.computeIfAbsent(world.provider.dimensionId, k -> new HashMap<>());
}
public Collection<IWirelessCharger> getChargers(World world) {
@@ -1,5 +1,6 @@
package crazypants.enderio.material;
import java.text.DecimalFormat;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
@@ -9,6 +10,7 @@ import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
@@ -20,6 +22,7 @@ import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.EnderIOTab;
import crazypants.enderio.ModObject;
import crazypants.enderio.config.Config;
import crazypants.enderio.power.BasicCapacitor;
import crazypants.enderio.power.Capacitors;
import crazypants.enderio.power.ICapacitor;
@@ -103,13 +106,46 @@ public class ItemCapacitor extends Item implements ICapacitorItem {
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
String space = " ";
EnumChatFormatting reset = EnumChatFormatting.RESET;
if (par1ItemStack != null && par1ItemStack.getItemDamage() > 0 && par1ItemStack.getItemDamage() != 7) {
par3List.add(EnderIO.lang.localize("machine.tooltip.upgrade"));
ICapacitor capacitor = getCapacitor(par1ItemStack);
par3List.add(EnumChatFormatting.GREEN + EnderIO.lang.localize("machine.tooltip.upgrade.name"));
if (SpecialTooltipHandler.showAdvancedTooltips()) {
SpecialTooltipHandler.addDetailedTooltipFromResources(par3List, "enderio.machine.tooltip.upgrade");
addUpgrades(par3List, capacitor, space, reset);
addRangeUpgrade(par3List, capacitor, space, reset);
} else {
SpecialTooltipHandler.addShowDetailsTooltip(par3List);
}
}
}
public void addUpgrades(List<String> list, ICapacitor capacitor, String space, EnumChatFormatting reset) {
DecimalFormat formatter = new DecimalFormat("#,###");
String tierString = EnumChatFormatting.AQUA + EnderIO.lang.localize("machine.tooltip.upgrade.tier");
String maxEnergyStorageString = EnumChatFormatting.AQUA
+ EnderIO.lang.localize("machine.tooltip.upgrade.energystorage");
String maxEnergyReceivedString = EnumChatFormatting.AQUA
+ EnderIO.lang.localize("machine.tooltip.upgrade.energyreceived");
String maxEnergyExtractedString = EnumChatFormatting.AQUA
+ EnderIO.lang.localize("machine.tooltip.upgrade.energyextracted");
String upgrades = EnumChatFormatting.GOLD + EnderIO.lang.localize("machine.tooltip.upgrade");
String maxEnergyStorage = formatter.format(capacitor.getMaxEnergyStored());
int tier = capacitor.getTier();
String maxEnergyReceived = formatter.format(capacitor.getMaxEnergyReceived());
String maxEnergyExtracted = formatter.format(capacitor.getMaxEnergyExtracted());
list.add(upgrades);
list.add(space + tierString + reset + tier);
list.add(space + maxEnergyReceivedString + reset + maxEnergyReceived);
list.add(space + maxEnergyExtractedString + reset + maxEnergyExtracted);
list.add(space + maxEnergyStorageString + reset + maxEnergyStorage);
}
public void addRangeUpgrade(List<String> list, ICapacitor capacitor, String space, EnumChatFormatting reset) {
String farmStation = EnumChatFormatting.AQUA + EnderIO.lang.localize("machine.tooltip.upgrade.farmstation");
String rangeUpgrade = EnumChatFormatting.GOLD + EnderIO.lang.localize("machine.tooltip.upgrade.range");
int range = Config.farmBonusSize * capacitor.getTier() - 1 + 2;
list.add(rangeUpgrade);
list.add(space + farmStation + reset + range);
}
}
@@ -373,9 +373,14 @@ enderio.endergeticCapacitor.name=Endergetic Capacitor
enderio.endergisedCapacitor.name=Endergised Capacitor
enderio.totemicCapacitor.name=Totemic Capacitor
enderio.machine.tooltip.upgrade=Machine Upgrade
enderio.machine.tooltip.upgrade.tooltip.detailed.line1=Increases energy storage and
enderio.machine.tooltip.upgrade.tooltip.detailed.line2=speed / range of machines
enderio.machine.tooltip.upgrade.name=Machine Upgrade
enderio.machine.tooltip.upgrade=Upgrades:
enderio.machine.tooltip.upgrade.tier=Tier:
enderio.machine.tooltip.upgrade.energyreceived=Max Energy Received:
enderio.machine.tooltip.upgrade.energyextracted=Max Energy Extracted:
enderio.machine.tooltip.upgrade.farmstation=Farming station radius:
enderio.machine.tooltip.upgrade.energystorage=Max energy storage:
enderio.machine.tooltip.upgrade.range=Range upgrade:
enderio.machine.tooltip.clearConfig=This will clear all stored info!
#Machines