use of mods.railcraft.common.blocks.TileLogic in project Railcraft by Railcraft.
the class TileRockCrusher method placeRockCrusher.
public static void placeRockCrusher(World world, BlockPos pos, int patternIndex, @Nullable List<ItemStack> input, @Nullable List<ItemStack> output) {
StructurePattern pattern = TileRockCrusher.patterns.get(patternIndex);
Char2ObjectMap<IBlockState> blockMapping = new Char2ObjectOpenHashMap<>();
IBlockState state = RailcraftBlocks.ROCK_CRUSHER.getState(null);
blockMapping.put('B', state);
blockMapping.put('D', state);
blockMapping.put('a', state);
blockMapping.put('b', state);
blockMapping.put('c', state);
blockMapping.put('d', state);
blockMapping.put('e', state);
blockMapping.put('f', state);
blockMapping.put('h', state);
Optional<TileLogic> tile = pattern.placeStructure(world, pos, blockMapping);
tile.flatMap(t -> t.getLogic(StructureLogic.class)).ifPresent(structure -> {
structure.getFunctionalLogic(InventoryLogic.class).ifPresent(logic -> {
for (int slot = 0; slot < 9; slot++) {
if (input != null && slot < input.size())
logic.setInventorySlotContents(RockCrusherLogic.SLOT_INPUT + slot, input.get(slot));
if (output != null && slot < output.size())
logic.setInventorySlotContents(RockCrusherLogic.SLOT_OUTPUT + slot, output.get(slot));
}
});
});
}
use of mods.railcraft.common.blocks.TileLogic in project Railcraft by Railcraft.
the class StructurePattern method placeStructure.
public Optional<TileLogic> placeStructure(World world, BlockPos pos, Char2ObjectMap<IBlockState> blockMapping) {
int xWidth = getPatternWidthX();
int zWidth = getPatternWidthZ();
int height = getPatternHeight();
BlockPos offset = pos.subtract(getMasterOffset());
Optional<TileLogic> master = Optional.empty();
for (byte px = 0; px < xWidth; px++) {
for (byte py = 0; py < height; py++) {
for (byte pz = 0; pz < zWidth; pz++) {
char marker = getPatternMarker(px, py, pz);
IBlockState blockState = blockMapping.get(marker);
if (blockState == null)
continue;
BlockPos p = new BlockPos(px, py, pz).add(offset);
world.setBlockState(p, blockState, 3);
if (px == masterOffset.getX() && py == masterOffset.getY() && pz == masterOffset.getZ())
master = WorldPlugin.getTileEntity(world, pos, TileLogic.class);
}
}
}
return master;
}
use of mods.railcraft.common.blocks.TileLogic in project Railcraft by Railcraft.
the class ItemMagnifyingGlass method onItemUseFirst.
@Override
public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) {
if (Game.isClient(world))
return EnumActionResult.PASS;
TileEntity t = WorldPlugin.getBlockTile(world, pos);
EnumActionResult returnValue = EnumActionResult.PASS;
if (t instanceof IOwnable) {
IOwnable ownable = (IOwnable) t;
ChatPlugin.sendLocalizedChatFromServer(player, "gui.railcraft.mag.glass.placedby", ownable.getDisplayName(), ownable.getOwner());
returnValue = EnumActionResult.SUCCESS;
}
if (t instanceof TileMultiBlock) {
TileMultiBlock tile = (TileMultiBlock) t;
if (tile.isStructureValid()) {
ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.multiblock.state.valid");
ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.multiblock.state.master." + (tile.isValidMaster() ? "true" : "false"));
} else
for (State returnState : EnumSet.complementOf(EnumSet.of(State.VALID))) {
List<StructurePattern> pats = tile.patternStates.get(returnState);
if (!pats.isEmpty()) {
List<Integer> indexList = pats.stream().map(map -> tile.getPatterns().indexOf(map)).collect(Collectors.toList());
ChatPlugin.sendLocalizedChatFromServer(player, returnState.message, indexList.toString());
}
}
returnValue = EnumActionResult.SUCCESS;
}
if (t instanceof TileLogic) {
TileLogic tile = (TileLogic) t;
Optional<StructureLogic> optLogic = tile.getLogic(StructureLogic.class);
if (optLogic.isPresent()) {
StructureLogic logic = optLogic.get();
if (logic.isStructureValid()) {
ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.multiblock.state.valid");
ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.multiblock.state.master." + (logic.isValidMaster() ? "true" : "false"));
} else
for (State returnState : EnumSet.complementOf(EnumSet.of(State.VALID))) {
List<StructurePattern> pats = logic.patternStates.get(returnState);
if (!pats.isEmpty()) {
List<Integer> indexList = pats.stream().map(map -> logic.getPatterns().indexOf(map)).collect(Collectors.toList());
ChatPlugin.sendLocalizedChatFromServer(player, returnState.message, indexList.toString());
}
}
returnValue = EnumActionResult.SUCCESS;
}
}
if (t instanceof IDualHeadSignal) {
IDualHeadSignal signal = (IDualHeadSignal) t;
SignalAspect top = signal.getSignalAspect(DualLamp.TOP);
SignalAspect bottom = signal.getSignalAspect(DualLamp.BOTTOM);
ChatPlugin.sendLocalizedChatFromServer(player, "gui.railcraft.mag.glass.aspect.dual", top.getLocalizationTag(), bottom.getLocalizationTag());
returnValue = EnumActionResult.SUCCESS;
} else if (t instanceof TileSignalBase) {
ChatPlugin.sendLocalizedChatFromServer(player, "gui.railcraft.mag.glass.aspect", ((TileSignalBase) t).getSignalAspect().getLocalizationTag());
returnValue = EnumActionResult.SUCCESS;
}
if (t instanceof IMagnifiable) {
((IMagnifiable) t).onMagnify(player);
}
return returnValue;
}
Aggregations