1.19 fishing station (#3071)
* added fishing station w/o recipe or functionality * added render cutout * fixed model parent * added config stuff and water check * added inventory * added functionality * added fishing station to vanilla creative menu * fixed GUI rendering * added recipe+advancement * fixed hotbar icon Co-authored-by: modmuss50 <modmuss50@gmail.com>
This commit is contained in:
parent
0aa4126966
commit
ad81e8cc8c
18 changed files with 455 additions and 1 deletions
|
@ -132,6 +132,7 @@ public class TechRebornClient implements ClientModInitializer {
|
||||||
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.REINFORCED_GLASS, RenderLayer.getCutout());
|
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.REINFORCED_GLASS, RenderLayer.getCutout());
|
||||||
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.Machine.RESIN_BASIN.block, RenderLayer.getCutout());
|
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.Machine.RESIN_BASIN.block, RenderLayer.getCutout());
|
||||||
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.POTTED_RUBBER_SAPLING, RenderLayer.getCutout());
|
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.POTTED_RUBBER_SAPLING, RenderLayer.getCutout());
|
||||||
|
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.Machine.FISHING_STATION.block, RenderLayer.getCutout());
|
||||||
|
|
||||||
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.RUBBER_LEAVES, RenderLayer.getCutoutMipped());
|
BlockRenderLayerMap.INSTANCE.putBlock(TRContent.RUBBER_LEAVES, RenderLayer.getCutoutMipped());
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ import techreborn.blockentity.machine.multiblock.*;
|
||||||
import techreborn.blockentity.machine.tier0.block.BlockBreakerBlockEntity;
|
import techreborn.blockentity.machine.tier0.block.BlockBreakerBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier0.block.BlockPlacerBlockEntity;
|
import techreborn.blockentity.machine.tier0.block.BlockPlacerBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier1.*;
|
import techreborn.blockentity.machine.tier1.*;
|
||||||
|
import techreborn.blockentity.machine.tier2.FishingStationBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
||||||
|
@ -115,6 +116,7 @@ public class ClientGuiType<T extends BlockEntity> {
|
||||||
public static final ClientGuiType<BlockPlacerBlockEntity> BLOCK_PLACER = register(GuiType.BLOCK_PLACER, GuiBlockPlacer::new);
|
public static final ClientGuiType<BlockPlacerBlockEntity> BLOCK_PLACER = register(GuiType.BLOCK_PLACER, GuiBlockPlacer::new);
|
||||||
public static final ClientGuiType<LaunchpadBlockEntity> LAUNCHPAD = register(GuiType.LAUNCHPAD, GuiLaunchpad::new);
|
public static final ClientGuiType<LaunchpadBlockEntity> LAUNCHPAD = register(GuiType.LAUNCHPAD, GuiLaunchpad::new);
|
||||||
public static final ClientGuiType<ElevatorBlockEntity> ELEVATOR = register(GuiType.ELEVATOR, GuiElevator::new);
|
public static final ClientGuiType<ElevatorBlockEntity> ELEVATOR = register(GuiType.ELEVATOR, GuiElevator::new);
|
||||||
|
public static final ClientGuiType<FishingStationBlockEntity> FISHING_STATION = register(GuiType.FISHING_STATION, GuiFishingStation::new);
|
||||||
|
|
||||||
private static <T extends BlockEntity> ClientGuiType<T> register(GuiType<T> type, GuiFactory<T> factory) {
|
private static <T extends BlockEntity> ClientGuiType<T> register(GuiType<T> type, GuiFactory<T> factory) {
|
||||||
return new ClientGuiType<>(type, factory);
|
return new ClientGuiType<>(type, factory);
|
||||||
|
|
67
src/client/java/techreborn/client/gui/GuiFishingStation.java
Normal file
67
src/client/java/techreborn/client/gui/GuiFishingStation.java
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* This file is part of TechReborn, licensed under the MIT License (MIT).
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 TechReborn
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package techreborn.client.gui;
|
||||||
|
|
||||||
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import reborncore.client.gui.builder.GuiBase;
|
||||||
|
import reborncore.common.screen.BuiltScreenHandler;
|
||||||
|
import techreborn.blockentity.machine.tier2.FishingStationBlockEntity;
|
||||||
|
|
||||||
|
public class GuiFishingStation extends GuiBase<BuiltScreenHandler> {
|
||||||
|
|
||||||
|
FishingStationBlockEntity blockEntity;
|
||||||
|
|
||||||
|
public GuiFishingStation(int syncID, final PlayerEntity player, final FishingStationBlockEntity blockEntity) {
|
||||||
|
super(player, blockEntity, blockEntity.createScreenHandler(syncID, player));
|
||||||
|
this.blockEntity = blockEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawBackground(MatrixStack matrixStack, final float f, final int mouseX, final int mouseY) {
|
||||||
|
super.drawBackground(matrixStack, f, mouseX, mouseY);
|
||||||
|
final GuiBase.Layer layer = GuiBase.Layer.BACKGROUND;
|
||||||
|
|
||||||
|
drawSlot(matrixStack, 8, 72, layer);
|
||||||
|
|
||||||
|
int gridYPos = 22;
|
||||||
|
drawSlot(matrixStack, 30, gridYPos, layer);
|
||||||
|
drawSlot(matrixStack, 48, gridYPos, layer);
|
||||||
|
drawSlot(matrixStack, 30, gridYPos + 18, layer);
|
||||||
|
drawSlot(matrixStack, 48, gridYPos + 18, layer);
|
||||||
|
drawSlot(matrixStack, 30, gridYPos + 36, layer);
|
||||||
|
drawSlot(matrixStack, 48, gridYPos + 36, layer);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawForeground(MatrixStack matrixStack, final int mouseX, final int mouseY) {
|
||||||
|
super.drawForeground(matrixStack, mouseX, mouseY);
|
||||||
|
final Layer layer = Layer.FOREGROUND;
|
||||||
|
|
||||||
|
builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) blockEntity.getEnergy(), (int) blockEntity.getMaxStoredPower(), mouseX, mouseY, 0, layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -57,6 +57,7 @@ import techreborn.blockentity.machine.multiblock.*;
|
||||||
import techreborn.blockentity.machine.tier0.block.BlockBreakerBlockEntity;
|
import techreborn.blockentity.machine.tier0.block.BlockBreakerBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier0.block.BlockPlacerBlockEntity;
|
import techreborn.blockentity.machine.tier0.block.BlockPlacerBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier1.*;
|
import techreborn.blockentity.machine.tier1.*;
|
||||||
|
import techreborn.blockentity.machine.tier2.FishingStationBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
||||||
|
@ -125,6 +126,7 @@ public final class GuiType<T extends BlockEntity> implements IMachineGuiHandler
|
||||||
public static final GuiType<BlockPlacerBlockEntity> BLOCK_PLACER = register("block_placer");
|
public static final GuiType<BlockPlacerBlockEntity> BLOCK_PLACER = register("block_placer");
|
||||||
public static final GuiType<LaunchpadBlockEntity> LAUNCHPAD = register("launchpad");
|
public static final GuiType<LaunchpadBlockEntity> LAUNCHPAD = register("launchpad");
|
||||||
public static final GuiType<ElevatorBlockEntity> ELEVATOR = register("elevator");
|
public static final GuiType<ElevatorBlockEntity> ELEVATOR = register("elevator");
|
||||||
|
public static final GuiType<FishingStationBlockEntity> FISHING_STATION = register("fishing_station");
|
||||||
|
|
||||||
private static <T extends BlockEntity> GuiType<T> register(String id) {
|
private static <T extends BlockEntity> GuiType<T> register(String id) {
|
||||||
return register(new Identifier("techreborn", id));
|
return register(new Identifier("techreborn", id));
|
||||||
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
/*
|
||||||
|
* This file is part of TechReborn, licensed under the MIT License (MIT).
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 TechReborn
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package techreborn.blockentity.machine.tier2;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.fluid.FluidState;
|
||||||
|
import net.minecraft.fluid.Fluids;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.loot.LootTable;
|
||||||
|
import net.minecraft.loot.LootTables;
|
||||||
|
import net.minecraft.loot.context.LootContext;
|
||||||
|
import net.minecraft.loot.context.LootContextParameters;
|
||||||
|
import net.minecraft.loot.context.LootContextTypes;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
|
import net.minecraft.server.world.ServerWorld;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import reborncore.api.IToolDrop;
|
||||||
|
import reborncore.api.blockentity.InventoryProvider;
|
||||||
|
import reborncore.common.blockentity.MachineBaseBlockEntity;
|
||||||
|
import reborncore.common.blockentity.RedstoneConfiguration;
|
||||||
|
import reborncore.common.powerSystem.PowerAcceptorBlockEntity;
|
||||||
|
import reborncore.common.screen.BuiltScreenHandler;
|
||||||
|
import reborncore.common.screen.BuiltScreenHandlerProvider;
|
||||||
|
import reborncore.common.screen.builder.ScreenHandlerBuilder;
|
||||||
|
import reborncore.common.util.ItemUtils;
|
||||||
|
import reborncore.common.util.RebornInventory;
|
||||||
|
import techreborn.config.TechRebornConfig;
|
||||||
|
import techreborn.init.TRBlockEntities;
|
||||||
|
import techreborn.init.TRContent;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FishingStationBlockEntity extends PowerAcceptorBlockEntity implements IToolDrop, InventoryProvider, BuiltScreenHandlerProvider {
|
||||||
|
|
||||||
|
private final RebornInventory<FishingStationBlockEntity> inventory = new RebornInventory<>(7, "FishingStationBlockEntity", 64, this);
|
||||||
|
|
||||||
|
public FishingStationBlockEntity(BlockPos pos, BlockState state) {
|
||||||
|
super(TRBlockEntities.FISHING_STATION, pos, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean insertIntoInv(List<ItemStack> stacks) {
|
||||||
|
boolean result = false;
|
||||||
|
for (ItemStack stack : stacks) {
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
if (insertIntoInv(i, stack)) result = true;
|
||||||
|
if (stack.isEmpty()) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean insertIntoInv(int slot, ItemStack stack) {
|
||||||
|
ItemStack targetStack = inventory.getStack(slot);
|
||||||
|
if (targetStack.isEmpty()) {
|
||||||
|
inventory.setStack(slot, stack.copy());
|
||||||
|
stack.decrement(stack.getCount());
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
if (ItemUtils.isItemEqual(stack, targetStack, true, false)) {
|
||||||
|
int freeStackSpace = targetStack.getMaxCount() - targetStack.getCount();
|
||||||
|
if (freeStackSpace > 0) {
|
||||||
|
int transferAmount = Math.min(freeStackSpace, stack.getCount());
|
||||||
|
targetStack.increment(transferAmount);
|
||||||
|
stack.decrement(transferAmount);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PowerAcceptorBlockEntity
|
||||||
|
@Override
|
||||||
|
public void tick(World world, BlockPos pos, BlockState state, MachineBaseBlockEntity blockEntity) {
|
||||||
|
super.tick(world, pos, state, blockEntity);
|
||||||
|
if (!(world instanceof ServerWorld) || getStored() <= TechRebornConfig.fishingStationEnergyPerCatch || !isActive(RedstoneConfiguration.POWER_IO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world.getTime() % TechRebornConfig.fishingStationInterval != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockPos frontPos = pos.offset(getFacing());
|
||||||
|
FluidState frontFluid = world.getFluidState(frontPos);
|
||||||
|
if (!frontFluid.isEqualAndStill(Fluids.WATER)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getStored() > TechRebornConfig.fishingStationEnergyPerCatch) {
|
||||||
|
LootContext.Builder builder = (new LootContext.Builder((ServerWorld)this.world)).parameter(LootContextParameters.ORIGIN, new Vec3d(frontPos.getX()+0.5,frontPos.getY()-0.5,frontPos.getZ()+0.5)).parameter(LootContextParameters.TOOL, TRContent.Machine.FISHING_STATION.getStack()).random(world.random);
|
||||||
|
LootTable lootTable = this.world.getServer().getLootManager().getTable(LootTables.FISHING_GAMEPLAY);
|
||||||
|
List<ItemStack> list = lootTable.generateLoot(builder.build(LootContextTypes.FISHING));
|
||||||
|
insertIntoInv(list);
|
||||||
|
useEnergy(TechRebornConfig.fishingStationEnergyPerCatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getBaseMaxPower() {
|
||||||
|
return TechRebornConfig.fishingStationMaxEnergy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canProvideEnergy(@Nullable Direction side) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getBaseMaxOutput() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getBaseMaxInput() {
|
||||||
|
return TechRebornConfig.fishingStationMaxInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readNbt(NbtCompound tag) {
|
||||||
|
super.readNbt(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeNbt(NbtCompound tag) {
|
||||||
|
super.writeNbt(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MachineBaseBlockEntity
|
||||||
|
@Override
|
||||||
|
public boolean hasSlotConfig() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canBeUpgraded() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// IToolDrop
|
||||||
|
@Override
|
||||||
|
public ItemStack getToolDrop(PlayerEntity p0) {
|
||||||
|
return TRContent.Machine.FISHING_STATION.getStack();
|
||||||
|
}
|
||||||
|
|
||||||
|
// InventoryProvider
|
||||||
|
@Override
|
||||||
|
public RebornInventory<FishingStationBlockEntity> getInventory() {
|
||||||
|
return this.inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
// BuiltScreenHandlerProvider
|
||||||
|
@Override
|
||||||
|
public BuiltScreenHandler createScreenHandler(int syncID, PlayerEntity player) {
|
||||||
|
return new ScreenHandlerBuilder("fishing_station")
|
||||||
|
.player(player.getInventory())
|
||||||
|
.inventory().hotbar().addInventory()
|
||||||
|
.blockEntity(this)
|
||||||
|
.outputSlot(0, 30, 22).outputSlot(1, 48, 22)
|
||||||
|
.outputSlot(2, 30, 40).outputSlot(3, 48, 40)
|
||||||
|
.outputSlot(4, 30, 58).outputSlot(5, 48, 58)
|
||||||
|
.energySlot(6, 8, 72).syncEnergyValue()
|
||||||
|
.addInventory().create(this, syncID);
|
||||||
|
}
|
||||||
|
}
|
|
@ -633,6 +633,18 @@ public class TechRebornConfig {
|
||||||
@Config(config = "machines", category = "elevator", key = "AllowElevatingThroughBlocks", comment = "Allow elevating through blocks (i.e. non air)")
|
@Config(config = "machines", category = "elevator", key = "AllowElevatingThroughBlocks", comment = "Allow elevating through blocks (i.e. non air)")
|
||||||
public static boolean allowElevatingThroughBlocks = true;
|
public static boolean allowElevatingThroughBlocks = true;
|
||||||
|
|
||||||
|
@Config(config = "machines", category = "fishing_station", key = "FishingStationMaxInput", comment = "Fishing Station Max Input (Energy per tick)")
|
||||||
|
public static int fishingStationMaxInput = 128;
|
||||||
|
|
||||||
|
@Config(config = "machines", category = "fishing_station", key = "FishingStationMaxEnergy", comment = "Fishing Station Max Energy")
|
||||||
|
public static int fishingStationMaxEnergy = 10_000;
|
||||||
|
|
||||||
|
@Config(config = "machines", category = "fishing_station", key = "FishingStationEnergyPerCatch", comment = "How much energy the Fishing Station uses per catch")
|
||||||
|
public static int fishingStationEnergyPerCatch = 500;
|
||||||
|
|
||||||
|
@Config(config = "machines", category = "fishing_station", key = "FishingStationInterval", comment = "Fishing Station Catch Interval in Ticks > 0")
|
||||||
|
public static int fishingStationInterval = 400; // 20 seconds
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
@Config(config = "misc", category = "general", key = "IC2TransformersStyle", comment = "Input from dots side, output from other sides, like in IC2.")
|
@Config(config = "misc", category = "general", key = "IC2TransformersStyle", comment = "Input from dots side, output from other sides, like in IC2.")
|
||||||
public static boolean IC2TransformersStyle = true;
|
public static boolean IC2TransformersStyle = true;
|
||||||
|
|
|
@ -55,6 +55,7 @@ import techreborn.blockentity.machine.multiblock.casing.MachineCasingBlockEntity
|
||||||
import techreborn.blockentity.machine.tier0.block.BlockBreakerBlockEntity;
|
import techreborn.blockentity.machine.tier0.block.BlockBreakerBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier0.block.BlockPlacerBlockEntity;
|
import techreborn.blockentity.machine.tier0.block.BlockPlacerBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier1.*;
|
import techreborn.blockentity.machine.tier1.*;
|
||||||
|
import techreborn.blockentity.machine.tier2.FishingStationBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
||||||
|
@ -147,6 +148,7 @@ public class TRBlockEntities {
|
||||||
public static final BlockEntityType<BlockPlacerBlockEntity> BLOCK_PLACER = register(BlockPlacerBlockEntity::new, "block_placer", TRContent.Machine.BLOCK_PLACER);
|
public static final BlockEntityType<BlockPlacerBlockEntity> BLOCK_PLACER = register(BlockPlacerBlockEntity::new, "block_placer", TRContent.Machine.BLOCK_PLACER);
|
||||||
public static final BlockEntityType<LaunchpadBlockEntity> LAUNCHPAD = register(LaunchpadBlockEntity::new, "launchpad", TRContent.Machine.LAUNCHPAD);
|
public static final BlockEntityType<LaunchpadBlockEntity> LAUNCHPAD = register(LaunchpadBlockEntity::new, "launchpad", TRContent.Machine.LAUNCHPAD);
|
||||||
public static final BlockEntityType<ElevatorBlockEntity> ELEVATOR = register(ElevatorBlockEntity::new, "elevator", TRContent.Machine.ELEVATOR);
|
public static final BlockEntityType<ElevatorBlockEntity> ELEVATOR = register(ElevatorBlockEntity::new, "elevator", TRContent.Machine.ELEVATOR);
|
||||||
|
public static final BlockEntityType<FishingStationBlockEntity> FISHING_STATION = register(FishingStationBlockEntity::new, "fishing_station", TRContent.Machine.FISHING_STATION);
|
||||||
|
|
||||||
public static <T extends BlockEntity> BlockEntityType<T> register(BiFunction<BlockPos, BlockState, T> supplier, String name, ItemConvertible... items) {
|
public static <T extends BlockEntity> BlockEntityType<T> register(BiFunction<BlockPos, BlockState, T> supplier, String name, ItemConvertible... items) {
|
||||||
return register(supplier, name, Arrays.stream(items).map(itemConvertible -> Block.getBlockFromItem(itemConvertible.asItem())).toArray(Block[]::new));
|
return register(supplier, name, Arrays.stream(items).map(itemConvertible -> Block.getBlockFromItem(itemConvertible.asItem())).toArray(Block[]::new));
|
||||||
|
|
|
@ -92,6 +92,7 @@ import techreborn.blockentity.machine.tier1.RollingMachineBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier1.ScrapboxinatorBlockEntity;
|
import techreborn.blockentity.machine.tier1.ScrapboxinatorBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier1.SolidCanningMachineBlockEntity;
|
import techreborn.blockentity.machine.tier1.SolidCanningMachineBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier1.WireMillBlockEntity;
|
import techreborn.blockentity.machine.tier1.WireMillBlockEntity;
|
||||||
|
import techreborn.blockentity.machine.tier2.FishingStationBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
import techreborn.blockentity.machine.tier2.LaunchpadBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
import techreborn.blockentity.machine.tier3.ChunkLoaderBlockEntity;
|
||||||
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
import techreborn.blockentity.machine.tier3.IndustrialCentrifugeBlockEntity;
|
||||||
|
@ -816,6 +817,7 @@ public class TRContent {
|
||||||
BLOCK_PLACER(new GenericMachineBlock(GuiType.BLOCK_PLACER, BlockPlacerBlockEntity::new)),
|
BLOCK_PLACER(new GenericMachineBlock(GuiType.BLOCK_PLACER, BlockPlacerBlockEntity::new)),
|
||||||
LAUNCHPAD(new GenericMachineBlock(GuiType.LAUNCHPAD, LaunchpadBlockEntity::new)),
|
LAUNCHPAD(new GenericMachineBlock(GuiType.LAUNCHPAD, LaunchpadBlockEntity::new)),
|
||||||
ELEVATOR(new GenericMachineBlock(GuiType.ELEVATOR, ElevatorBlockEntity::new)),
|
ELEVATOR(new GenericMachineBlock(GuiType.ELEVATOR, ElevatorBlockEntity::new)),
|
||||||
|
FISHING_STATION(new GenericMachineBlock(GuiType.FISHING_STATION, FishingStationBlockEntity::new)),
|
||||||
|
|
||||||
DIESEL_GENERATOR(new GenericGeneratorBlock(GuiType.DIESEL_GENERATOR, DieselGeneratorBlockEntity::new)),
|
DIESEL_GENERATOR(new GenericGeneratorBlock(GuiType.DIESEL_GENERATOR, DieselGeneratorBlockEntity::new)),
|
||||||
DRAGON_EGG_SYPHON(new GenericGeneratorBlock(null, DragonEggSyphonBlockEntity::new)),
|
DRAGON_EGG_SYPHON(new GenericGeneratorBlock(null, DragonEggSyphonBlockEntity::new)),
|
||||||
|
|
|
@ -462,7 +462,8 @@ public class TRItemGroup {
|
||||||
TRContent.Machine.DISTILLATION_TOWER);
|
TRContent.Machine.DISTILLATION_TOWER);
|
||||||
entries.addAfter(Items.CAULDRON,
|
entries.addAfter(Items.CAULDRON,
|
||||||
TRContent.Machine.DRAIN,
|
TRContent.Machine.DRAIN,
|
||||||
TRContent.Machine.FLUID_REPLICATOR);
|
TRContent.Machine.FLUID_REPLICATOR,
|
||||||
|
TRContent.Machine.FISHING_STATION);
|
||||||
entries.addAfter(Items.LODESTONE, TRContent.Machine.CHUNK_LOADER);
|
entries.addAfter(Items.LODESTONE, TRContent.Machine.CHUNK_LOADER);
|
||||||
entries.addAfter(Items.BEEHIVE, TRContent.Machine.GREENHOUSE_CONTROLLER);
|
entries.addAfter(Items.BEEHIVE, TRContent.Machine.GREENHOUSE_CONTROLLER);
|
||||||
entries.addAfter(Items.LIGHTNING_ROD, TRContent.Machine.LIGHTNING_ROD);
|
entries.addAfter(Items.LIGHTNING_ROD, TRContent.Machine.LIGHTNING_ROD);
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=north": { "model": "techreborn:block/machines/tier2_machines/fishing_station" },
|
||||||
|
"facing=south": { "model": "techreborn:block/machines/tier2_machines/fishing_station", "y": 180 },
|
||||||
|
"facing=west": { "model": "techreborn:block/machines/tier2_machines/fishing_station", "y": 270 },
|
||||||
|
"facing=east": { "model": "techreborn:block/machines/tier2_machines/fishing_station", "y": 90 }
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,6 +34,7 @@
|
||||||
"block.techreborn.industrial_grinder": "Industrial Grinder",
|
"block.techreborn.industrial_grinder": "Industrial Grinder",
|
||||||
"block.techreborn.launchpad": "Launchpad",
|
"block.techreborn.launchpad": "Launchpad",
|
||||||
"block.techreborn.elevator": "Elevator",
|
"block.techreborn.elevator": "Elevator",
|
||||||
|
"block.techreborn.fishing_station": "Fishing Station",
|
||||||
"block.techreborn.chunk_loader": "Industrial Chunkloader",
|
"block.techreborn.chunk_loader": "Industrial Chunkloader",
|
||||||
"block.techreborn.diesel_generator": "Diesel Generator",
|
"block.techreborn.diesel_generator": "Diesel Generator",
|
||||||
"block.techreborn.drain": "Drain",
|
"block.techreborn.drain": "Drain",
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/orientable",
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"0": "techreborn:block/machines/tier2_machines/machine_top",
|
||||||
|
"1": "techreborn:block/machines/tier2_machines/machine_east",
|
||||||
|
"2": "techreborn:block/machines/tier2_machines/machine_west",
|
||||||
|
"4": "techreborn:block/machines/tier2_machines/machine_bottom",
|
||||||
|
"5": "techreborn:block/machines/tier2_machines/machine_back",
|
||||||
|
"6": "techreborn:block/machines/tier2_machines/fishing_station",
|
||||||
|
"7": "techreborn:block/machines/tier2_machines/fishing_station_net",
|
||||||
|
"8": "techreborn:block/machines/tier2_machines/fishing_station_net_side",
|
||||||
|
"particle": "techreborn:block/machines/tier2_machines/machine_top"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 16, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 16], "texture": "#6"},
|
||||||
|
"east": {"uv": [0, 0, 16, 16], "texture": "#1"},
|
||||||
|
"south": {"uv": [0, 0, 16, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 0, 16, 16], "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1, 0, -10],
|
||||||
|
"to": [2, 1, 4],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "x", "origin": [1, 0, 4]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#7"},
|
||||||
|
"east": {"uv": [0, 0, 1, 14], "rotation": 90, "texture": "#7"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#7"},
|
||||||
|
"west": {"uv": [0, 0, 1, 14], "rotation": 270, "texture": "#7"},
|
||||||
|
"up": {"uv": [0, 0, 1, 14], "texture": "#7"},
|
||||||
|
"down": {"uv": [0, 0, 1, 14], "rotation": 180, "texture": "#7"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [14, 0, -10],
|
||||||
|
"to": [15, 1, 4],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "x", "origin": [1, 0, 4]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#7"},
|
||||||
|
"east": {"uv": [0, 0, 1, 14], "rotation": 90, "texture": "#7"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#7"},
|
||||||
|
"west": {"uv": [0, 0, 1, 14], "rotation": 270, "texture": "#7"},
|
||||||
|
"up": {"uv": [0, 0, 1, 14], "texture": "#7"},
|
||||||
|
"down": {"uv": [0, 0, 1, 14], "rotation": 180, "texture": "#7"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [2, 0.5, -9.5],
|
||||||
|
"to": [14, 0.5, 4.5],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "x", "origin": [1, 0, 4]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 12, 0], "rotation": 180, "texture": "#7"},
|
||||||
|
"east": {"uv": [0, 0, 0, 14], "rotation": 90, "texture": "#7"},
|
||||||
|
"south": {"uv": [0, 0, 12, 0], "texture": "#7"},
|
||||||
|
"west": {"uv": [0, 0, 0, 14], "rotation": 270, "texture": "#7"},
|
||||||
|
"up": {"uv": [4, 0, 16, 14], "texture": "#7"},
|
||||||
|
"down": {"uv": [4, 0, 16, 14], "rotation": 180, "texture": "#7"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [14.5, 1, -5],
|
||||||
|
"to": [14.5, 10, 4],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [1, 0, 4]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 0, 9], "texture": "#missing"},
|
||||||
|
"east": {"uv": [7, 0, 16, 9], "texture": "#8"},
|
||||||
|
"south": {"uv": [0, 0, 0, 9], "texture": "#missing"},
|
||||||
|
"west": {"uv": [7, 0, 16, 9], "rotation": 90, "texture": "#8"},
|
||||||
|
"up": {"uv": [0, 0, 0, 9], "texture": "#missing"},
|
||||||
|
"down": {"uv": [0, 0, 0, 9], "texture": "#missing"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1.5, 1, -5],
|
||||||
|
"to": [1.5, 10, 4],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [1, 0, 4]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 0, 9], "texture": "#missing"},
|
||||||
|
"east": {"uv": [7, 0, 16, 9], "texture": "#8"},
|
||||||
|
"south": {"uv": [0, 0, 0, 9], "texture": "#missing"},
|
||||||
|
"west": {"uv": [7, 0, 16, 9], "rotation": 90, "texture": "#8"},
|
||||||
|
"up": {"uv": [0, 0, 0, 9], "texture": "#missing"},
|
||||||
|
"down": {"uv": [0, 0, 0, 9], "texture": "#missing"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"parent": "techreborn:block/machines/tier2_machines/fishing_station",
|
||||||
|
"display": {
|
||||||
|
"gui": {
|
||||||
|
"rotation": [ 30, 225, 0 ],
|
||||||
|
"translation": [ -1, 0, 0],
|
||||||
|
"scale":[ 0.5, 0.5, 0.5 ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 644 B |
Binary file not shown.
After Width: | Height: | Size: 351 B |
Binary file not shown.
After Width: | Height: | Size: 183 B |
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"techreborn:crafting_table/machine/fishing_station"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_sapphire_plates": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"tag": "c:sapphire_plates"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "techreborn:crafting_table/machine/fishing_station"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_sapphire_plates",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"SCS",
|
||||||
|
"TFT",
|
||||||
|
"PSP"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"C": {
|
||||||
|
"item": "techreborn:advanced_circuit"
|
||||||
|
},
|
||||||
|
"F": {
|
||||||
|
"item": "techreborn:advanced_machine_frame"
|
||||||
|
},
|
||||||
|
"P": {
|
||||||
|
"tag": "c:sapphire_plates"
|
||||||
|
},
|
||||||
|
"S": {
|
||||||
|
"item": "minecraft:string"
|
||||||
|
},
|
||||||
|
"T": {
|
||||||
|
"item": "minecraft:stick"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "techreborn:fishing_station"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue