Search in sources :

Example 21 with IEnergyContainer

use of mekanism.api.energy.IEnergyContainer in project Mekanism by mekanism.

the class ModuleFarmingUnit method stripLogsAOE.

private ActionResultType stripLogsAOE(ItemUseContext context) {
    PlayerEntity player = context.getPlayer();
    if (player == null || player.isShiftKeyDown()) {
        // Skip if we don't have a player, or they are sneaking
        return ActionResultType.PASS;
    }
    int diameter = farmingRadius.get().getRadius();
    if (diameter == 0) {
        // If we don't have any blocks we are going to want to do, then skip it
        return ActionResultType.PASS;
    }
    ItemStack stack = context.getItemInHand();
    IEnergyContainer energyContainer = StorageUtils.getEnergyContainer(stack, 0);
    if (energyContainer == null) {
        return ActionResultType.FAIL;
    }
    FloatingLong energy = energyContainer.getEnergy();
    FloatingLong energyUsage = MekanismConfig.gear.mekaToolEnergyUsageAxe.get();
    if (energy.smallerThan(energyUsage)) {
        // Fail if we don't have enough energy or using the item failed
        return ActionResultType.FAIL;
    }
    World world = context.getLevel();
    BlockPos pos = context.getClickedPos();
    BlockState clickedState = world.getBlockState(pos);
    BlockState strippedState = clickedState.getToolModifiedState(world, pos, player, stack, ToolType.AXE);
    if (strippedState == null) {
        // Skip stripping the blocks if the one we clicked cannot be stripped
        return ActionResultType.PASS;
    } else if (world.isClientSide) {
        return ActionResultType.SUCCESS;
    }
    Axis axis = clickedState.getValue(RotatedPillarBlock.AXIS);
    // Process the block we interacted with initially and play the sound
    world.setBlock(pos, strippedState, BlockFlags.DEFAULT_AND_RERENDER);
    world.playSound(null, pos, SoundEvents.AXE_STRIP, SoundCategory.BLOCKS, 1.0F, 1.0F);
    Direction side = context.getClickedFace();
    FloatingLong energyUsed = energyUsage.copy();
    Vector3d offset = Vector3d.atLowerCornerOf(side.getNormal()).scale(0.44);
    for (BlockPos newPos : getStrippingArea(pos, side, (diameter - 1) / 2)) {
        if (pos.equals(newPos)) {
            // Skip the source position as it is free, and we manually handled it before the loop
            continue;
        } else if (energyUsed.add(energyUsage).greaterThan(energy)) {
            break;
        }
        // Check to make that the result we would get from stripping the other block is the same as the one we got on the initial block we interacted with
        // Also make sure that it is on the same axis as the block we initially clicked
        BlockState state = world.getBlockState(newPos);
        if (strippedState == state.getToolModifiedState(world, newPos, player, stack, ToolType.AXE) && axis == state.getValue(RotatedPillarBlock.AXIS)) {
            // Some of the below methods don't behave properly when the BlockPos is mutable, so now that we are onto ones where it may actually
            // matter we make sure to get an immutable instance of newPos
            newPos = newPos.immutable();
            // Add energy cost
            energyUsed = energyUsed.plusEqual(energyUsage);
            // Replace the block. Note it just directly sets it (in the same way that AxeItem does).
            world.setBlock(newPos, strippedState, BlockFlags.DEFAULT_AND_RERENDER);
            world.playSound(null, pos, SoundEvents.AXE_STRIP, SoundCategory.BLOCKS, 1.0F, 1.0F);
            Mekanism.packetHandler.sendToAllTracking(new PacketLightningRender(LightningPreset.TOOL_AOE, Objects.hash(pos, newPos), Vector3d.atCenterOf(pos).add(offset), Vector3d.atCenterOf(newPos).add(offset), 10), world, pos);
        }
    }
    energyContainer.extract(energyUsed, Action.EXECUTE, AutomationType.MANUAL);
    return ActionResultType.SUCCESS;
}
Also used : FloatingLong(mekanism.api.math.FloatingLong) IEnergyContainer(mekanism.api.energy.IEnergyContainer) BlockState(net.minecraft.block.BlockState) PacketLightningRender(mekanism.common.network.to_client.PacketLightningRender) Vector3d(net.minecraft.util.math.vector.Vector3d) BlockPos(net.minecraft.util.math.BlockPos) ItemStack(net.minecraft.item.ItemStack) World(net.minecraft.world.World) Direction(net.minecraft.util.Direction) Axis(net.minecraft.util.Direction.Axis) PlayerEntity(net.minecraft.entity.player.PlayerEntity)

Example 22 with IEnergyContainer

use of mekanism.api.energy.IEnergyContainer in project Mekanism by mekanism.

the class ModuleShearingUnit method onDispense.

@Nonnull
@Override
public ModuleDispenseResult onDispense(IModule<ModuleShearingUnit> module, IBlockSource source) {
    IEnergyContainer energyContainer = module.getEnergyContainer();
    if (energyContainer != null) {
        ServerWorld world = source.getLevel();
        Direction facing = source.getBlockState().getValue(DispenserBlock.FACING);
        BlockPos pos = source.getPos().relative(facing);
        if (tryShearBlock(energyContainer, world, pos, facing.getOpposite()) || tryShearLivingEntity(energyContainer, world, pos, module.getContainer())) {
            return ModuleDispenseResult.HANDLED;
        }
    }
    return ModuleDispenseResult.FAIL_PREVENT_DROP;
}
Also used : ServerWorld(net.minecraft.world.server.ServerWorld) IEnergyContainer(mekanism.api.energy.IEnergyContainer) BlockPos(net.minecraft.util.math.BlockPos) Direction(net.minecraft.util.Direction) Nonnull(javax.annotation.Nonnull)

Example 23 with IEnergyContainer

use of mekanism.api.energy.IEnergyContainer in project Mekanism by mekanism.

the class StorageUtils method getEnergyRatio.

public static double getEnergyRatio(ItemStack stack) {
    IEnergyContainer container = getEnergyContainer(stack, 0);
    double ratio = 0.0D;
    if (container != null) {
        ratio = container.getEnergy().divideToLevel(container.getMaxEnergy());
    }
    return ratio;
}
Also used : IEnergyContainer(mekanism.api.energy.IEnergyContainer)

Example 24 with IEnergyContainer

use of mekanism.api.energy.IEnergyContainer in project Mekanism by mekanism.

the class TileEntityMekanism method addContainerTrackers.

@Override
public void addContainerTrackers(MekanismContainer container) {
    // setup dynamic container syncing
    SyncMapper.INSTANCE.setup(container, getClass(), () -> this);
    for (ITileComponent component : components) {
        component.trackForMainContainer(container);
    }
    if (supportsRedstone()) {
        container.track(SyncableEnum.create(RedstoneControl::byIndexStatic, RedstoneControl.DISABLED, () -> controlType, value -> controlType = value));
    }
    boolean isClient = isRemote();
    if (canHandleGas() && handles(SubstanceType.GAS)) {
        List<IGasTank> gasTanks = getGasTanks(null);
        for (IGasTank gasTank : gasTanks) {
            container.track(SyncableGasStack.create(gasTank, isClient));
        }
    }
    if (canHandleInfusion() && handles(SubstanceType.INFUSION)) {
        List<IInfusionTank> infusionTanks = getInfusionTanks(null);
        for (IInfusionTank infusionTank : infusionTanks) {
            container.track(SyncableInfusionStack.create(infusionTank, isClient));
        }
    }
    if (canHandlePigment() && handles(SubstanceType.PIGMENT)) {
        List<IPigmentTank> pigmentTanks = getPigmentTanks(null);
        for (IPigmentTank pigmentTank : pigmentTanks) {
            container.track(SyncablePigmentStack.create(pigmentTank, isClient));
        }
    }
    if (canHandleSlurry() && handles(SubstanceType.SLURRY)) {
        List<ISlurryTank> slurryTanks = getSlurryTanks(null);
        for (ISlurryTank slurryTank : slurryTanks) {
            container.track(SyncableSlurryStack.create(slurryTank, isClient));
        }
    }
    if (canHandleFluid() && handles(SubstanceType.FLUID)) {
        List<IExtendedFluidTank> fluidTanks = getFluidTanks(null);
        for (IExtendedFluidTank fluidTank : fluidTanks) {
            container.track(SyncableFluidStack.create(fluidTank, isClient));
        }
    }
    if (canHandleHeat() && handles(SubstanceType.HEAT)) {
        List<IHeatCapacitor> heatCapacitors = getHeatCapacitors(null);
        for (IHeatCapacitor capacitor : heatCapacitors) {
            container.track(SyncableDouble.create(capacitor::getHeat, capacitor::setHeat));
            if (capacitor instanceof BasicHeatCapacitor) {
                container.track(SyncableDouble.create(capacitor::getHeatCapacity, capacity -> ((BasicHeatCapacitor) capacitor).setHeatCapacity(capacity, false)));
            }
        }
    }
    if (canHandleEnergy() && handles(SubstanceType.ENERGY)) {
        container.track(SyncableFloatingLong.create(this::getInputRate, this::setInputRate));
        List<IEnergyContainer> energyContainers = getEnergyContainers(null);
        for (IEnergyContainer energyContainer : energyContainers) {
            container.track(SyncableFloatingLong.create(energyContainer::getEnergy, energyContainer::setEnergy));
            if (energyContainer instanceof MachineEnergyContainer) {
                MachineEnergyContainer<?> machineEnergy = (MachineEnergyContainer<?>) energyContainer;
                if (supportsUpgrades() || machineEnergy.adjustableRates()) {
                    container.track(SyncableFloatingLong.create(machineEnergy::getMaxEnergy, machineEnergy::setMaxEnergy));
                    container.track(SyncableFloatingLong.create(machineEnergy::getEnergyPerTick, machineEnergy::setEnergyPerTick));
                }
            }
        }
    }
}
Also used : IHeatHandler(mekanism.api.heat.IHeatHandler) IGasTile(mekanism.common.tile.interfaces.chemical.IGasTile) SecurityMode(mekanism.common.lib.security.SecurityMode) IHeatCapacitorHolder(mekanism.common.capabilities.holder.heat.IHeatCapacitorHolder) ComputerMethodMapper(mekanism.common.integration.computer.ComputerMethodMapper) ITileHeatHandler(mekanism.common.capabilities.heat.ITileHeatHandler) IEnergyContainerHolder(mekanism.common.capabilities.holder.energy.IEnergyContainerHolder) GasHandlerManager(mekanism.common.capabilities.resolver.manager.ChemicalHandlerManager.GasHandlerManager) TileComponentConfig(mekanism.common.tile.component.TileComponentConfig) CompoundNBT(net.minecraft.nbt.CompoundNBT) ITierUpgradable(mekanism.common.tile.interfaces.ITierUpgradable) Direction(net.minecraft.util.Direction) SlurryHandlerManager(mekanism.common.capabilities.resolver.manager.ChemicalHandlerManager.SlurryHandlerManager) ITileRadioactive(mekanism.common.tile.interfaces.ITileRadioactive) IComputerTile(mekanism.common.integration.computer.IComputerTile) Block(net.minecraft.block.Block) Capabilities(mekanism.common.capabilities.Capabilities) Map(java.util.Map) InfusionHandlerManager(mekanism.common.capabilities.resolver.manager.ChemicalHandlerManager.InfusionHandlerManager) BoundComputerMethod(mekanism.common.integration.computer.BoundComputerMethod) SyncMapper(mekanism.common.inventory.container.sync.dynamic.SyncMapper) ISound(net.minecraft.client.audio.ISound) ISustainedInventory(mekanism.common.tile.interfaces.ISustainedInventory) ListNBT(net.minecraft.nbt.ListNBT) IChunkLoader(mekanism.common.lib.chunkloading.IChunkLoader) ITileRedstone(mekanism.common.tile.interfaces.ITileRedstone) Attribute(mekanism.common.block.attribute.Attribute) NBTUtils(mekanism.common.util.NBTUtils) EnergyHandlerManager(mekanism.common.capabilities.resolver.manager.EnergyHandlerManager) Set(java.util.Set) IBlockProvider(mekanism.api.providers.IBlockProvider) IMekanismFluidHandler(mekanism.api.fluid.IMekanismFluidHandler) ISecurityTile(mekanism.common.lib.security.ISecurityTile) ITrackableContainer(mekanism.common.inventory.container.ITrackableContainer) MekanismUtils(mekanism.common.util.MekanismUtils) FluidHandlerManager(mekanism.common.capabilities.resolver.manager.FluidHandlerManager) MethodRestriction(mekanism.common.integration.computer.ComputerMethodMapper.MethodRestriction) ComputerException(mekanism.common.integration.computer.ComputerException) ComputerCapabilityHelper(mekanism.common.integration.computer.ComputerCapabilityHelper) IGasTank(mekanism.api.chemical.gas.IGasTank) ITileSound(mekanism.common.tile.interfaces.ITileSound) SyncablePigmentStack(mekanism.common.inventory.container.sync.chemical.SyncablePigmentStack) TileComponentSecurity(mekanism.common.tile.component.TileComponentSecurity) ActionResultType(net.minecraft.util.ActionResultType) SyncableFloatingLong(mekanism.common.inventory.container.sync.SyncableFloatingLong) Util(net.minecraft.util.Util) IInfusionTile(mekanism.common.tile.interfaces.chemical.IInfusionTile) IHeatCapacitor(mekanism.api.heat.IHeatCapacitor) AttributeUpgradeable(mekanism.common.block.attribute.AttributeUpgradeable) IPigmentTank(mekanism.api.chemical.pigment.IPigmentTank) ISlurryTank(mekanism.api.chemical.slurry.ISlurryTank) AttributeComparator(mekanism.common.block.attribute.Attributes.AttributeComparator) ArrayList(java.util.ArrayList) ItemConfigurationCard(mekanism.common.item.ItemConfigurationCard) ItemStack(net.minecraft.item.ItemStack) ItemConfigurator(mekanism.common.item.ItemConfigurator) NetworkHooks(net.minecraftforge.fml.network.NetworkHooks) IMekanismStrictEnergyHandler(mekanism.api.energy.IMekanismStrictEnergyHandler) AttributeStateFacing(mekanism.common.block.attribute.AttributeStateFacing) IEnergyContainer(mekanism.api.energy.IEnergyContainer) ICapabilityHandlerManager(mekanism.common.capabilities.resolver.manager.ICapabilityHandlerManager) Nullable(javax.annotation.Nullable) EnumUtils(mekanism.common.util.EnumUtils) SyncableEnum(mekanism.common.inventory.container.sync.SyncableEnum) PigmentHandlerManager(mekanism.common.capabilities.resolver.manager.ChemicalHandlerManager.PigmentHandlerManager) IComparatorSupport(mekanism.common.tile.interfaces.IComparatorSupport) BlockPos(net.minecraft.util.math.BlockPos) SecurityUtils(mekanism.common.util.SecurityUtils) IUpgradeData(mekanism.common.upgrade.IUpgradeData) AttributeSecurity(mekanism.common.block.attribute.Attributes.AttributeSecurity) BasicHeatCapacitor(mekanism.common.capabilities.heat.BasicHeatCapacitor) IFrequencyHandler(mekanism.common.lib.frequency.IFrequencyHandler) TileEntity(net.minecraft.tileentity.TileEntity) TextComponentUtil(mekanism.api.text.TextComponentUtil) IInventorySlotHolder(mekanism.common.capabilities.holder.slot.IInventorySlotHolder) Action(mekanism.api.Action) SoundEvent(net.minecraft.util.SoundEvent) MekanismAPI(mekanism.api.MekanismAPI) IMekanismInventory(mekanism.api.inventory.IMekanismInventory) SyncableGasStack(mekanism.common.inventory.container.sync.chemical.SyncableGasStack) AutomationType(mekanism.api.inventory.AutomationType) ITileUpgradable(mekanism.common.tile.interfaces.ITileUpgradable) AttributeComputerIntegration(mekanism.common.block.attribute.Attributes.AttributeComputerIntegration) TileComponentUpgrade(mekanism.common.tile.component.TileComponentUpgrade) IInfusionTank(mekanism.api.chemical.infuse.IInfusionTank) AttributeStateActive(mekanism.common.block.attribute.AttributeStateActive) TileEntityType(net.minecraft.tileentity.TileEntityType) BlockState(net.minecraft.block.BlockState) AttributeRedstone(mekanism.common.block.attribute.Attributes.AttributeRedstone) AttributeGui(mekanism.common.block.attribute.AttributeGui) PlayerEntity(net.minecraft.entity.player.PlayerEntity) MachineEnergyContainer(mekanism.common.capabilities.energy.MachineEnergyContainer) SyncableInfusionStack(mekanism.common.inventory.container.sync.chemical.SyncableInfusionStack) SyncableSlurryStack(mekanism.common.inventory.container.sync.chemical.SyncableSlurryStack) DataHandlerUtils(mekanism.api.DataHandlerUtils) IExtendedFluidTank(mekanism.api.fluid.IExtendedFluidTank) ITileActive(mekanism.common.tile.interfaces.ITileActive) BlockRayTraceResult(net.minecraft.util.math.BlockRayTraceResult) Objects(java.util.Objects) IConfigCardAccess(mekanism.api.IConfigCardAccess) List(java.util.List) AttributeSound(mekanism.common.block.attribute.AttributeSound) NBTConstants(mekanism.api.NBTConstants) ItemHandlerManager(mekanism.common.capabilities.resolver.manager.ItemHandlerManager) CachedAmbientTemperature(mekanism.common.capabilities.heat.CachedAmbientTemperature) ITickableTileEntity(net.minecraft.tileentity.ITickableTileEntity) MekanismContainer(mekanism.common.inventory.container.MekanismContainer) ServerPlayerEntity(net.minecraft.entity.player.ServerPlayerEntity) Upgrade(mekanism.api.Upgrade) IPigmentTile(mekanism.common.tile.interfaces.chemical.IPigmentTile) CapabilityUtils(mekanism.common.util.CapabilityUtils) IFluidTankHolder(mekanism.common.capabilities.holder.fluid.IFluidTankHolder) SyncableDouble(mekanism.common.inventory.container.sync.SyncableDouble) Function(java.util.function.Function) ITextComponent(net.minecraft.util.text.ITextComponent) Minecraft(net.minecraft.client.Minecraft) FloatingLong(mekanism.api.math.FloatingLong) ComputerMethod(mekanism.common.integration.computer.annotation.ComputerMethod) ISlurryTile(mekanism.common.tile.interfaces.chemical.ISlurryTile) IHasTileEntity(mekanism.common.block.interfaces.IHasTileEntity) Hand(net.minecraft.util.Hand) Nonnull(javax.annotation.Nonnull) IntSupplier(java.util.function.IntSupplier) AttributeUpgradeSupport(mekanism.common.block.attribute.AttributeUpgradeSupport) Mekanism(mekanism.common.Mekanism) SoundHandler(mekanism.client.sound.SoundHandler) ITileComponent(mekanism.common.tile.component.ITileComponent) HeatHandlerManager(mekanism.common.capabilities.resolver.manager.HeatHandlerManager) ITileDirectional(mekanism.common.tile.interfaces.ITileDirectional) ObjectOpenHashSet(it.unimi.dsi.fastutil.objects.ObjectOpenHashSet) NBT(net.minecraftforge.common.util.Constants.NBT) TileComponentFrequency(mekanism.common.lib.frequency.TileComponentFrequency) IInventorySlot(mekanism.api.inventory.IInventorySlot) WorldUtils(mekanism.common.util.WorldUtils) Collections(java.util.Collections) MekanismConfig(mekanism.common.config.MekanismConfig) SyncableFluidStack(mekanism.common.inventory.container.sync.SyncableFluidStack) BasicHeatCapacitor(mekanism.common.capabilities.heat.BasicHeatCapacitor) IGasTank(mekanism.api.chemical.gas.IGasTank) ITileComponent(mekanism.common.tile.component.ITileComponent) IPigmentTank(mekanism.api.chemical.pigment.IPigmentTank) IEnergyContainer(mekanism.api.energy.IEnergyContainer) IInfusionTank(mekanism.api.chemical.infuse.IInfusionTank) IHeatCapacitor(mekanism.api.heat.IHeatCapacitor) MachineEnergyContainer(mekanism.common.capabilities.energy.MachineEnergyContainer) IExtendedFluidTank(mekanism.api.fluid.IExtendedFluidTank) ISlurryTank(mekanism.api.chemical.slurry.ISlurryTank)

Example 25 with IEnergyContainer

use of mekanism.api.energy.IEnergyContainer in project Mekanism by mekanism.

the class PacketPortableTeleporterTeleport method handle.

@Override
public void handle(NetworkEvent.Context context) {
    ServerPlayerEntity player = context.getSender();
    if (player == null) {
        return;
    }
    ItemStack stack = player.getItemInHand(currentHand);
    if (!stack.isEmpty() && stack.getItem() instanceof ItemPortableTeleporter) {
        // Note: We make use of the player's own UUID, given they shouldn't be allowed to teleport to a private frequency of another player
        TeleporterFrequency found = FrequencyType.TELEPORTER.getFrequency(identity, player.getUUID());
        if (found == null) {
            return;
        }
        Coord4D coords = found.getClosestCoords(new Coord4D(player));
        if (coords != null) {
            World teleWorld = ServerLifecycleHooks.getCurrentServer().getLevel(coords.dimension);
            TileEntityTeleporter teleporter = WorldUtils.getTileEntity(TileEntityTeleporter.class, teleWorld, coords.getPos());
            if (teleporter != null) {
                if (!player.isCreative()) {
                    FloatingLong energyCost = TileEntityTeleporter.calculateEnergyCost(player, coords);
                    IEnergyContainer energyContainer = StorageUtils.getEnergyContainer(stack, 0);
                    if (energyContainer == null || energyContainer.extract(energyCost, Action.SIMULATE, AutomationType.MANUAL).smallerThan(energyCost)) {
                        return;
                    }
                    energyContainer.extract(energyCost, Action.EXECUTE, AutomationType.MANUAL);
                }
                // TODO: Figure out what this try catch is meant to be catching as I don't see much of a reason for it to exist
                try {
                    teleporter.didTeleport.add(player.getUUID());
                    teleporter.teleDelay = 5;
                    player.connection.aboveGroundTickCount = 0;
                    player.closeContainer();
                    Mekanism.packetHandler.sendToAllTracking(new PacketPortalFX(player.blockPosition()), player.level, coords.getPos());
                    if (player.isPassenger()) {
                        player.stopRiding();
                    }
                    double oldX = player.getX();
                    double oldY = player.getY();
                    double oldZ = player.getZ();
                    World oldWorld = player.level;
                    BlockPos teleporterTargetPos = teleporter.getTeleporterTargetPos();
                    TileEntityTeleporter.teleportEntityTo(player, teleWorld, teleporterTargetPos);
                    TileEntityTeleporter.alignPlayer(player, teleporterTargetPos, teleporter);
                    if (player.level != oldWorld || player.distanceToSqr(oldX, oldY, oldZ) >= 25) {
                        // If the player teleported over 5 blocks, play the sound at both the destination and the source
                        oldWorld.playSound(null, oldX, oldY, oldZ, SoundEvents.ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F);
                    }
                    player.level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F);
                    teleporter.sendTeleportParticles();
                } catch (Exception ignored) {
                }
            }
        }
    }
}
Also used : PacketPortalFX(mekanism.common.network.to_client.PacketPortalFX) TeleporterFrequency(mekanism.common.content.teleporter.TeleporterFrequency) ServerPlayerEntity(net.minecraft.entity.player.ServerPlayerEntity) World(net.minecraft.world.World) FloatingLong(mekanism.api.math.FloatingLong) IEnergyContainer(mekanism.api.energy.IEnergyContainer) ItemPortableTeleporter(mekanism.common.item.ItemPortableTeleporter) Coord4D(mekanism.api.Coord4D) BlockPos(net.minecraft.util.math.BlockPos) ItemStack(net.minecraft.item.ItemStack) TileEntityTeleporter(mekanism.common.tile.TileEntityTeleporter)

Aggregations

IEnergyContainer (mekanism.api.energy.IEnergyContainer)34 FloatingLong (mekanism.api.math.FloatingLong)26 BlockPos (net.minecraft.util.math.BlockPos)13 PlayerEntity (net.minecraft.entity.player.PlayerEntity)12 ItemStack (net.minecraft.item.ItemStack)12 Nonnull (javax.annotation.Nonnull)10 Direction (net.minecraft.util.Direction)8 World (net.minecraft.world.World)8 BlockState (net.minecraft.block.BlockState)6 ServerPlayerEntity (net.minecraft.entity.player.ServerPlayerEntity)6 ArrayList (java.util.ArrayList)5 List (java.util.List)4 Map (java.util.Map)4 Nullable (javax.annotation.Nullable)4 TileEntityMekanism (mekanism.common.tile.base.TileEntityMekanism)4 TileEntity (net.minecraft.tileentity.TileEntity)4 SyncableFloatingLong (mekanism.common.inventory.container.sync.SyncableFloatingLong)3 EnumMap (java.util.EnumMap)2 HashMap (java.util.HashMap)2 Set (java.util.Set)2