Remove covers and the cutting tool
This commit is contained in:
@@ -206,7 +206,6 @@ public final class RS {
|
||||
|
||||
e.getRegistry().register(new SecurityCardItem());
|
||||
e.getRegistry().register(new NetworkCardItem());
|
||||
e.getRegistry().register(new CuttingToolItem());
|
||||
|
||||
for (ItemStorageType type : ItemStorageType.values()) {
|
||||
if (type != ItemStorageType.CREATIVE) {
|
||||
|
||||
@@ -7,8 +7,6 @@ public final class RSItems {
|
||||
public static final ItemWirelessGrid WIRELESS_GRID = null;
|
||||
public static final ItemWirelessFluidGrid WIRELESS_FLUID_GRID = null;
|
||||
public static final ItemWirelessCraftingMonitor WIRELESS_CRAFTING_MONITOR = null;
|
||||
public static final ItemCover COVER = null;
|
||||
public static final ItemHollowCover HOLLOW_COVER = null;
|
||||
|
||||
@ObjectHolder(RS.ID + ":quartz_enriched_iron")
|
||||
public static final QuartzEnrichedIronItem QUARTZ_ENRICHED_IRON = null;
|
||||
@@ -24,8 +22,6 @@ public final class RSItems {
|
||||
public static final FilterItem FILTER = null;
|
||||
@ObjectHolder(RS.ID + ":storage_housing")
|
||||
public static final StorageHousingItem STORAGE_HOUSING = null;
|
||||
@ObjectHolder(RS.ID + ":cutting_tool")
|
||||
public static final CuttingToolItem CUTTING_TOOL = null;
|
||||
@ObjectHolder(RS.ID + ":network_card")
|
||||
public static final NetworkCardItem NETWORK_CARD = null;
|
||||
@ObjectHolder(RS.ID + ":security_card")
|
||||
|
||||
@@ -67,10 +67,6 @@ public class RSOldConfig {
|
||||
public int readerWriterChannelEnergyCapacity;
|
||||
//endregion
|
||||
|
||||
//region Covers
|
||||
public boolean hideCovers;
|
||||
//endregion
|
||||
|
||||
//region Autocrafting
|
||||
public int calculationTimeoutMs;
|
||||
//endregion
|
||||
@@ -83,7 +79,6 @@ public class RSOldConfig {
|
||||
private static final String WIRELESS_FLUID_GRID = "wirelessFluidGrid";
|
||||
private static final String WIRELESS_CRAFTING_MONITOR = "wirelessCraftingMonitor";
|
||||
private static final String READER_WRITER = "readerWriter";
|
||||
private static final String COVERS = "covers";
|
||||
private static final String AUTOCRAFTING = "autocrafting";
|
||||
//endregion
|
||||
|
||||
@@ -154,10 +149,6 @@ public class RSOldConfig {
|
||||
readerWriterChannelEnergyCapacity = config.getInt("channelEnergyCapacity", READER_WRITER, 16000, 0, Integer.MAX_VALUE, "The energy capacity of energy channels");
|
||||
//endregion
|
||||
|
||||
//region Covers
|
||||
hideCovers = config.getBoolean("hideCovers", COVERS, false, "Whether to hide covers in the creative mode tabs and JEI");
|
||||
//endregion
|
||||
|
||||
//region Autocrafting
|
||||
calculationTimeoutMs = config.getInt("calculationTimeoutMs", AUTOCRAFTING, 5000, 5000, Integer.MAX_VALUE, "The autocrafting calculation timeout in milliseconds, tasks taking longer than this to calculate (NOT execute) are cancelled to avoid server strain");
|
||||
//endregion
|
||||
|
||||
@@ -1,24 +1,13 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class CableNetworkNode extends NetworkNode implements ICoverable {
|
||||
public class CableNetworkNode extends NetworkNode {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "cable");
|
||||
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
public CableNetworkNode(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
@@ -32,38 +21,4 @@ public class CableNetworkNode extends NetworkNode implements ICoverable {
|
||||
public ResourceLocation getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundNBT write(CompoundNBT tag) {
|
||||
super.write(tag);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(CompoundNBT tag) {
|
||||
super.read(tag);
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IItemHandler getDrops() {
|
||||
return coverManager.getAsInventory();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
|
||||
public interface ICoverable {
|
||||
CoverManager getCoverManager();
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import com.mojang.authlib.GameProfile;
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||
@@ -33,24 +32,20 @@ import net.minecraft.world.World;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import net.minecraftforge.common.util.FakePlayerFactory;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.UUID;
|
||||
|
||||
public class NetworkNodeConstructor extends NetworkNode implements IComparable, IType, ICoverable {
|
||||
public class NetworkNodeConstructor extends NetworkNode implements IComparable, IType {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "constructor");
|
||||
|
||||
private static final String NBT_COMPARE = "Compare";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
private static final String NBT_DROP = "Drop";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
private static final String NBT_FLUID_FILTERS = "FluidFilters";
|
||||
|
||||
private static final int BASE_SPEED = 20;
|
||||
@@ -64,8 +59,6 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
||||
private int type = IType.ITEMS;
|
||||
private boolean drop = false;
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
public NetworkNodeConstructor(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
@@ -303,8 +296,6 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
||||
|
||||
StackUtils.writeItems(upgrades, 1, tag);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -339,10 +330,6 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
||||
drop = tag.getBoolean(NBT_DROP);
|
||||
}
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
|
||||
StackUtils.readItems(itemFilters, 0, tag);
|
||||
|
||||
if (tag.contains(NBT_FLUID_FILTERS)) {
|
||||
@@ -364,12 +351,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
||||
|
||||
@Override
|
||||
public IItemHandler getDrops() {
|
||||
return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
return upgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -398,9 +380,4 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
|
||||
public FluidInventory getFluidFilters() {
|
||||
return fluidFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.mojang.authlib.GameProfile;
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
|
||||
@@ -22,7 +21,6 @@ import net.minecraft.inventory.InventoryHelper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.server.management.PlayerProfileCache;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
@@ -31,28 +29,24 @@ import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import net.minecraftforge.common.util.FakePlayerFactory;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class NetworkNodeDestructor extends NetworkNode implements IComparable, IWhitelistBlacklist, IType, ICoverable {
|
||||
public class NetworkNodeDestructor extends NetworkNode implements IComparable, IWhitelistBlacklist, IType {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "destructor");
|
||||
|
||||
private static final String NBT_COMPARE = "Compare";
|
||||
private static final String NBT_MODE = "Mode";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
private static final String NBT_PICKUP = "Pickup";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
private static final String NBT_FLUID_FILTERS = "FluidFilters";
|
||||
|
||||
private static final int BASE_SPEED = 20;
|
||||
@@ -67,8 +61,6 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
private int type = IType.ITEMS;
|
||||
private boolean pickupItem = false;
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
public NetworkNodeDestructor(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
@@ -232,10 +224,6 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
super.read(tag);
|
||||
|
||||
StackUtils.readItems(upgrades, 1, tag);
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -249,8 +237,6 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
|
||||
StackUtils.writeItems(upgrades, 1, tag);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -312,7 +298,7 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
|
||||
@Override
|
||||
public IItemHandler getDrops() {
|
||||
return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
|
||||
return upgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -337,11 +323,6 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
return fluidFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
}
|
||||
|
||||
public boolean isPickupItem() {
|
||||
return pickupItem;
|
||||
}
|
||||
@@ -349,9 +330,4 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
|
||||
public void setPickupItem(boolean pickupItem) {
|
||||
this.pickupItem = pickupItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
|
||||
@@ -16,27 +15,21 @@ import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.fluids.FluidAttributes;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class NetworkNodeExporter extends NetworkNode implements IComparable, IType, ICoverable {
|
||||
public class NetworkNodeExporter extends NetworkNode implements IComparable, IType {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "exporter");
|
||||
|
||||
private static final String NBT_COMPARE = "Compare";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
private static final String NBT_FLUID_FILTERS = "FluidFilters";
|
||||
|
||||
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
|
||||
@@ -47,8 +40,6 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
||||
private int compare = IComparer.COMPARE_NBT;
|
||||
private int type = IType.ITEMS;
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
private int filterSlot;
|
||||
|
||||
public NetworkNodeExporter(World world, BlockPos pos) {
|
||||
@@ -177,8 +168,6 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
||||
|
||||
StackUtils.writeItems(upgrades, 1, tag);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -201,10 +190,6 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
||||
super.read(tag);
|
||||
|
||||
StackUtils.readItems(upgrades, 1, tag);
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -232,7 +217,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
||||
|
||||
@Override
|
||||
public IItemHandler getDrops() {
|
||||
return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
|
||||
return upgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -256,14 +241,4 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
||||
public FluidInventory getFluidFilters() {
|
||||
return fluidFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStor
|
||||
import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
@@ -25,29 +24,24 @@ import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class NetworkNodeExternalStorage extends NetworkNode implements IStorageProvider, IStorageScreen, IComparable, IWhitelistBlacklist, IPrioritizable, IType, IAccessType, IExternalStorageContext, ICoverable {
|
||||
public class NetworkNodeExternalStorage extends NetworkNode implements IStorageProvider, IStorageScreen, IComparable, IWhitelistBlacklist, IPrioritizable, IType, IAccessType, IExternalStorageContext {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "external_storage");
|
||||
|
||||
private static final String NBT_PRIORITY = "Priority";
|
||||
private static final String NBT_COMPARE = "Compare";
|
||||
private static final String NBT_MODE = "Mode";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
private static final String NBT_FLUID_FILTERS = "FluidFilters";
|
||||
|
||||
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
|
||||
@@ -60,8 +54,6 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
|
||||
private AccessType accessType = AccessType.INSERT_EXTRACT;
|
||||
private int networkTicks;
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
private List<IStorageExternal<ItemStack>> itemStorages = new CopyOnWriteArrayList<>();
|
||||
private List<IStorageExternal<FluidStack>> fluidStorages = new CopyOnWriteArrayList<>();
|
||||
|
||||
@@ -116,24 +108,6 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
|
||||
return ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(CompoundNBT tag) {
|
||||
super.read(tag);
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundNBT write(CompoundNBT tag) {
|
||||
super.write(tag);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundNBT writeConfiguration(CompoundNBT tag) {
|
||||
super.writeConfiguration(tag);
|
||||
@@ -367,20 +341,4 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
|
||||
public List<IStorageExternal<FluidStack>> getFluidStorages() {
|
||||
return fluidStorages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IItemHandler getDrops() {
|
||||
return coverManager.getAsInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
|
||||
@@ -18,27 +17,21 @@ import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.fluids.FluidAttributes;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class NetworkNodeImporter extends NetworkNode implements IComparable, IWhitelistBlacklist, IType, ICoverable {
|
||||
public class NetworkNodeImporter extends NetworkNode implements IComparable, IWhitelistBlacklist, IType {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "importer");
|
||||
|
||||
private static final String NBT_COMPARE = "Compare";
|
||||
private static final String NBT_MODE = "Mode";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
private static final String NBT_FLUID_FILTERS = "FLuidFilters";
|
||||
|
||||
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
|
||||
@@ -50,8 +43,6 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IWh
|
||||
private int mode = IWhitelistBlacklist.BLACKLIST;
|
||||
private int type = IType.ITEMS;
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
private int currentSlot;
|
||||
|
||||
public NetworkNodeImporter(World world, BlockPos pos) {
|
||||
@@ -158,10 +149,6 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IWh
|
||||
super.read(tag);
|
||||
|
||||
StackUtils.readItems(upgrades, 1, tag);
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,8 +162,6 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IWh
|
||||
|
||||
StackUtils.writeItems(upgrades, 1, tag);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -224,12 +209,7 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IWh
|
||||
|
||||
@Override
|
||||
public IItemHandler getDrops() {
|
||||
return new CombinedInvWrapper(upgrades, coverManager.getAsInventory());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
return upgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -253,9 +233,4 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IWh
|
||||
public FluidInventory getFluidFilters() {
|
||||
return fluidFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,29 +2,21 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.block.NodeBlock;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileReader;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReaderWriter, ICoverable {
|
||||
public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReaderWriter {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "reader");
|
||||
|
||||
private static final String NBT_CHANNEL = "Channel";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
|
||||
private String channel = "";
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
public NetworkNodeReader(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
@@ -81,10 +73,6 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade
|
||||
if (tag.contains(NBT_CHANNEL)) {
|
||||
channel = tag.getString(NBT_CHANNEL);
|
||||
}
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -98,18 +86,6 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade
|
||||
|
||||
tag.putString(NBT_CHANNEL, channel);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,32 +5,24 @@ import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.block.NodeBlock;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileWriter;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReaderWriter, ICoverable {
|
||||
public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReaderWriter {
|
||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "writer");
|
||||
|
||||
private static final String NBT_CHANNEL = "Channel";
|
||||
private static final String NBT_COVERS = "Covers";
|
||||
|
||||
private String channel = "";
|
||||
|
||||
private int redstoneStrength;
|
||||
private int lastRedstoneStrength;
|
||||
|
||||
private CoverManager coverManager = new CoverManager(this);
|
||||
|
||||
public NetworkNodeWriter(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
@@ -113,10 +105,6 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
|
||||
if (tag.contains(NBT_CHANNEL)) {
|
||||
channel = tag.getString(NBT_CHANNEL);
|
||||
}
|
||||
|
||||
if (tag.contains(NBT_COVERS)) {
|
||||
coverManager.readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -130,18 +118,6 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
|
||||
|
||||
tag.putString(NBT_CHANNEL, channel);
|
||||
|
||||
tag.put(NBT_COVERS, coverManager.writeToNbt());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConduct(@Nullable Direction direction) {
|
||||
return coverManager.canConduct(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoverManager getCoverManager() {
|
||||
return coverManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node.cover;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class Cover {
|
||||
private ItemStack stack;
|
||||
private CoverType type;
|
||||
|
||||
public Cover(ItemStack stack, CoverType type) {
|
||||
this.stack = stack;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public ItemStack getStack() {
|
||||
return stack;
|
||||
}
|
||||
|
||||
public CoverType getType() {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
@@ -1,193 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node.cover;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.CableNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.ICoverable;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CoverManager {
|
||||
private static final String NBT_DIRECTION = "Direction";
|
||||
private static final String NBT_ITEM = "Item";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
|
||||
private Map<Direction, Cover> covers = new HashMap<>();
|
||||
private NetworkNode node;
|
||||
|
||||
public CoverManager(NetworkNode node) {
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
public boolean canConduct(Direction direction) {
|
||||
Cover cover = getCover(direction);
|
||||
if (cover != null && cover.getType() != CoverType.HOLLOW) {
|
||||
return false;
|
||||
}
|
||||
|
||||
INetworkNode neighbor = API.instance().getNetworkNodeManager((ServerWorld) node.getWorld()).getNode(node.getPos().offset(direction));
|
||||
if (neighbor instanceof ICoverable) {
|
||||
cover = ((ICoverable) neighbor).getCoverManager().getCover(direction.getOpposite());
|
||||
|
||||
if (cover != null && cover.getType() != CoverType.HOLLOW) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Cover getCover(Direction facing) {
|
||||
return covers.get(facing);
|
||||
}
|
||||
|
||||
public boolean hasCover(Direction facing) {
|
||||
return covers.containsKey(facing);
|
||||
}
|
||||
|
||||
public boolean setCover(Direction facing, @Nullable Cover cover) {
|
||||
if (cover == null || (isValidCover(cover.getStack()) && !hasCover(facing))) {
|
||||
if (cover != null) {
|
||||
if (facing == node.getDirection() && !(node instanceof CableNetworkNode) && cover.getType() != CoverType.HOLLOW) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (cover == null) {
|
||||
covers.remove(facing);
|
||||
} else {
|
||||
covers.put(facing, cover);
|
||||
}
|
||||
|
||||
node.markDirty();
|
||||
|
||||
if (node.getNetwork() != null) {
|
||||
node.getNetwork().getNodeGraph().invalidate(Action.PERFORM, node.getNetwork().world(), node.getNetwork().getPosition());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void readFromNbt(ListNBT list) {
|
||||
covers.clear();
|
||||
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
CompoundNBT tag = list.getCompound(i);
|
||||
|
||||
if (tag.contains(NBT_DIRECTION) && tag.contains(NBT_ITEM)) {
|
||||
Direction direction = Direction.byIndex(tag.getInt(NBT_DIRECTION));
|
||||
ItemStack item = ItemStack.read(tag.getCompound(NBT_ITEM));
|
||||
int type = tag.contains(NBT_TYPE) ? tag.getInt(NBT_TYPE) : 0;
|
||||
|
||||
if (type >= CoverType.values().length) {
|
||||
type = 0;
|
||||
}
|
||||
|
||||
if (isValidCover(item)) {
|
||||
covers.put(direction, new Cover(item, CoverType.values()[type]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ListNBT writeToNbt() {
|
||||
ListNBT list = new ListNBT();
|
||||
|
||||
for (Map.Entry<Direction, Cover> entry : covers.entrySet()) {
|
||||
CompoundNBT tag = new CompoundNBT();
|
||||
|
||||
tag.putInt(NBT_DIRECTION, entry.getKey().ordinal());
|
||||
tag.put(NBT_ITEM, entry.getValue().getStack().serializeNBT());
|
||||
tag.putInt(NBT_TYPE, entry.getValue().getType().ordinal());
|
||||
|
||||
list.add(tag);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public IItemHandlerModifiable getAsInventory() {
|
||||
ItemStackHandler handler = new ItemStackHandler(covers.size());
|
||||
|
||||
int i = 0;
|
||||
|
||||
for (Map.Entry<Direction, Cover> entry : covers.entrySet()) {
|
||||
ItemStack cover = entry.getValue().getType().createStack();
|
||||
|
||||
// TODO ItemCover.setItem(cover, entry.getValue().getStack());
|
||||
|
||||
handler.setStackInSlot(i++, cover);
|
||||
}
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static boolean isValidCover(ItemStack item) {
|
||||
if (item.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Block block = getBlock(item);
|
||||
|
||||
BlockState state = getBlockState(item);
|
||||
|
||||
// TODO: block.isSolid was isTopSolid! correct?
|
||||
return block != null && state != null && ((isModelSupported(state) && block.isSolid(state) && !block.ticksRandomly(state) && !block.hasTileEntity(state)) || block instanceof GlassBlock || block instanceof StainedGlassBlock);
|
||||
}
|
||||
|
||||
private static boolean isModelSupported(BlockState state) {
|
||||
if (state.getRenderType() != BlockRenderType.MODEL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return state.isSolid(); // TODO: correct? was isFullCube
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Block getBlock(@Nullable ItemStack item) {
|
||||
if (item == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Block block = Block.getBlockFromItem(item.getItem());
|
||||
|
||||
if (block == Blocks.AIR) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return block;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@SuppressWarnings("deprecation")
|
||||
public static BlockState getBlockState(@Nullable ItemStack item) {
|
||||
Block block = getBlock(item);
|
||||
|
||||
if (block == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return block.getDefaultState(); // TODO: is still correct?
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node.cover;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public enum CoverType {
|
||||
NORMAL,
|
||||
HOLLOW;
|
||||
|
||||
public ItemStack createStack() {
|
||||
return new ItemStack(this == NORMAL ? RSItems.COVER : RSItems.HOLLOW_COVER);
|
||||
}
|
||||
}
|
||||
@@ -57,22 +57,6 @@ public abstract class NodeBlock extends BaseBlock {
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO - Covers needed for this one
|
||||
@Override
|
||||
public boolean rotateBlock(World world, BlockPos pos, Direction axis) {
|
||||
if (!world.isRemote && getDirection() != null) {
|
||||
TileBase tile = (TileBase) world.getTileEntity(pos);
|
||||
|
||||
Direction newDirection = getDirection().cycle(tile.getDirection());
|
||||
|
||||
if (tile instanceof TileNode && ((TileNode) tile).getNode() instanceof ICoverable && ((ICoverable) ((TileNode) tile).getNode()).getCoverManager().hasCover(newDirection)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return super.rotateBlock(world, pos, axis);
|
||||
}*/
|
||||
|
||||
public boolean hasConnectedState() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -15,9 +15,6 @@ public class RSJeiPlugin implements IModPlugin {
|
||||
|
||||
public static IJeiRuntime RUNTIME;
|
||||
|
||||
// TODO registry.addRecipeRegistryPlugin(new RecipeRegistryPluginCover());
|
||||
// TODO registry.addRecipeRegistryPlugin(new RecipeRegistryPluginHollowCover());
|
||||
|
||||
@Override
|
||||
public ResourceLocation getPluginUid() {
|
||||
return ID;
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.integration.jei;
|
||||
|
||||
/*
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemCover;
|
||||
import mezz.jei.api.recipe.*;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class RecipeRegistryPluginCover implements IRecipeRegistryPlugin {
|
||||
@Override
|
||||
public <V> List<String> getRecipeCategoryUids(IFocus<V> focus) {
|
||||
if (focus.getValue() instanceof ItemStack) {
|
||||
ItemStack stack = (ItemStack) focus.getValue();
|
||||
|
||||
if (focus.getMode() == IFocus.Mode.INPUT) {
|
||||
if ((!RS.INSTANCE.config.hideCovers && CoverManager.isValidCover(stack)) || API.instance().getComparer().isEqualNoQuantity(stack, ItemCover.HIDDEN_COVER_ALTERNATIVE)) {
|
||||
return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING);
|
||||
}
|
||||
} else if (focus.getMode() == IFocus.Mode.OUTPUT) {
|
||||
if (stack.getItem() == RSItems.COVER) {
|
||||
return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends IRecipeWrapper, V> List<T> getRecipeWrappers(IRecipeCategory<T> recipeCategory, IFocus<V> focus) {
|
||||
if (focus.getValue() instanceof ItemStack) {
|
||||
ItemStack stack = (ItemStack) focus.getValue();
|
||||
|
||||
if (focus.getMode() == IFocus.Mode.INPUT) {
|
||||
if ((!RS.INSTANCE.config.hideCovers && CoverManager.isValidCover(stack)) || API.instance().getComparer().isEqualNoQuantity(stack, ItemCover.HIDDEN_COVER_ALTERNATIVE)) {
|
||||
ItemStack cover = new ItemStack(RSItems.COVER);
|
||||
|
||||
ItemCover.setItem(cover, stack);
|
||||
|
||||
return Collections.singletonList((T) new RecipeWrapperCover(stack, cover));
|
||||
}
|
||||
} else if (focus.getMode() == IFocus.Mode.OUTPUT) {
|
||||
if (stack.getItem() == RSItems.COVER) {
|
||||
return Collections.singletonList((T) new RecipeWrapperCover(ItemCover.getItem(stack), stack));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends IRecipeWrapper> List<T> getRecipeWrappers(IRecipeCategory<T> recipeCategory) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,75 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.integration.jei;
|
||||
/*
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemCover;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemHollowCover;
|
||||
import mezz.jei.api.recipe.*;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class RecipeRegistryPluginHollowCover implements IRecipeRegistryPlugin {
|
||||
@Override
|
||||
public <V> List<String> getRecipeCategoryUids(IFocus<V> focus) {
|
||||
if (focus.getValue() instanceof ItemStack) {
|
||||
ItemStack stack = (ItemStack) focus.getValue();
|
||||
|
||||
if (focus.getMode() == IFocus.Mode.INPUT) {
|
||||
if (stack.getItem() == RSItems.COVER) {
|
||||
ItemStack itemInCover = ItemCover.getItem(stack);
|
||||
|
||||
if ((!RS.INSTANCE.config.hideCovers && CoverManager.isValidCover(itemInCover)) || API.instance().getComparer().isEqualNoQuantity(itemInCover, ItemHollowCover.HIDDEN_COVER_ALTERNATIVE)) {
|
||||
return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING);
|
||||
}
|
||||
}
|
||||
} else if (focus.getMode() == IFocus.Mode.OUTPUT) {
|
||||
if (stack.getItem() == RSItems.HOLLOW_COVER) {
|
||||
return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends IRecipeWrapper, V> List<T> getRecipeWrappers(IRecipeCategory<T> recipeCategory, IFocus<V> focus) {
|
||||
if (focus.getValue() instanceof ItemStack) {
|
||||
ItemStack stack = (ItemStack) focus.getValue();
|
||||
|
||||
if (focus.getMode() == IFocus.Mode.INPUT) {
|
||||
if (stack.getItem() == RSItems.COVER) {
|
||||
ItemStack itemInCover = ItemCover.getItem(stack);
|
||||
|
||||
if ((!RS.INSTANCE.config.hideCovers && CoverManager.isValidCover(itemInCover)) || API.instance().getComparer().isEqualNoQuantity(itemInCover, ItemHollowCover.HIDDEN_COVER_ALTERNATIVE)) {
|
||||
ItemStack hollowCover = new ItemStack(RSItems.HOLLOW_COVER);
|
||||
|
||||
ItemCover.setItem(hollowCover, itemInCover);
|
||||
|
||||
return Collections.singletonList((T) new RecipeWrapperHollowCover(stack, hollowCover));
|
||||
}
|
||||
}
|
||||
} else if (focus.getMode() == IFocus.Mode.OUTPUT) {
|
||||
if (stack.getItem() == RSItems.HOLLOW_COVER) {
|
||||
ItemStack cover = new ItemStack(RSItems.COVER);
|
||||
|
||||
ItemCover.setItem(cover, ItemCover.getItem(stack));
|
||||
|
||||
return Collections.singletonList((T) new RecipeWrapperHollowCover(cover, stack));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends IRecipeWrapper> List<T> getRecipeWrappers(IRecipeCategory<T> recipeCategory) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,34 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.integration.jei;
|
||||
|
||||
/*
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import mezz.jei.api.ingredients.IIngredients;
|
||||
import mezz.jei.api.ingredients.VanillaTypes;
|
||||
import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RecipeWrapperCover implements ICraftingRecipeWrapper {
|
||||
private ItemStack stack;
|
||||
private ItemStack cover;
|
||||
|
||||
public RecipeWrapperCover(ItemStack stack, ItemStack cover) {
|
||||
this.stack = ItemHandlerHelper.copyStackWithSize(stack, 1);
|
||||
this.cover = ItemHandlerHelper.copyStackWithSize(cover, 6);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getIngredients(IIngredients ingredients) {
|
||||
List<ItemStack> inputs = new ArrayList<>();
|
||||
|
||||
inputs.add(new ItemStack(RSItems.CUTTING_TOOL));
|
||||
inputs.add(stack);
|
||||
|
||||
ingredients.setInputs(VanillaTypes.ITEM, inputs);
|
||||
ingredients.setOutput(VanillaTypes.ITEM, cover);
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,48 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.integration.jei;
|
||||
|
||||
/*
|
||||
import mezz.jei.api.ingredients.IIngredients;
|
||||
import mezz.jei.api.ingredients.VanillaTypes;
|
||||
import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RecipeWrapperHollowCover implements IShapedCraftingRecipeWrapper {
|
||||
private ItemStack cover;
|
||||
private ItemStack hollowCover;
|
||||
|
||||
public RecipeWrapperHollowCover(ItemStack cover, ItemStack hollowCover) {
|
||||
this.cover = ItemHandlerHelper.copyStackWithSize(cover, 1);
|
||||
this.hollowCover = ItemHandlerHelper.copyStackWithSize(hollowCover, 8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getIngredients(IIngredients ingredients) {
|
||||
List<ItemStack> inputs = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
if (i == 4) {
|
||||
inputs.add(ItemStack.EMPTY);
|
||||
} else {
|
||||
inputs.add(cover);
|
||||
}
|
||||
}
|
||||
|
||||
ingredients.setInputs(VanillaTypes.ITEM, inputs);
|
||||
ingredients.setOutput(VanillaTypes.ITEM, hollowCover);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,32 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.item;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class CuttingToolItem extends Item {
|
||||
public CuttingToolItem() {
|
||||
super(new Item.Properties().group(RS.MAIN_GROUP).maxDamage(50 - 1));
|
||||
|
||||
this.setRegistryName(RS.ID, "cutting_tool");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getIsRepairable(ItemStack a, ItemStack b) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getContainerItem(ItemStack stack) {
|
||||
ItemStack copy = stack.copy();
|
||||
|
||||
copy.setDamage(stack.getDamage() + 1);
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasContainerItem(ItemStack stack) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,141 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.item;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
|
||||
public class ItemCover extends Item {
|
||||
private static final String NBT_ITEM = "Item";
|
||||
|
||||
// public static final ItemStack HIDDEN_COVER_ALTERNATIVE = new ItemStack(Blocks.STONEBRICK);
|
||||
|
||||
public ItemCover() {
|
||||
super(null);
|
||||
|
||||
//setCreativeTab(RS.INSTANCE.coversTab);
|
||||
}
|
||||
|
||||
/* TODO
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerModels(IModelRegistration modelRegistration) {
|
||||
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
|
||||
|
||||
modelRegistration.addModelLoader(() -> new CustomModelLoaderCover()); // Don't use a method reference here, it crashes the server!
|
||||
}
|
||||
|
||||
public static void setItem(ItemStack cover, ItemStack item) {
|
||||
if (!cover.hasTagCompound()) {
|
||||
cover.setTagCompound(new CompoundNBT());
|
||||
}
|
||||
|
||||
cover.getTagCompound().put(NBT_ITEM, item.serializeNBT());
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public static ItemStack getItem(ItemStack cover) {
|
||||
if (!cover.hasTagCompound() || !cover.getTagCompound().hasKey(NBT_ITEM)) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
return new ItemStack(cover.getTagCompound().getCompound(NBT_ITEM));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack stack, @Nullable World world, List<String> tooltip, ITooltipFlag flag) {
|
||||
super.addInformation(stack, world, tooltip, flag);
|
||||
|
||||
ItemStack item = getItem(stack);
|
||||
|
||||
if (!item.isEmpty()) {
|
||||
tooltip.add(item.getItem().getItemStackDisplayName(item));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
|
||||
if (!isInCreativeTab(tab)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (RS.INSTANCE.config.hideCovers) {
|
||||
ItemStack stack = new ItemStack(this);
|
||||
|
||||
setItem(stack, HIDDEN_COVER_ALTERNATIVE);
|
||||
|
||||
items.add(stack);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for (Block block : Block.REGISTRY) {
|
||||
Item item = Item.getItemFromBlock(block);
|
||||
|
||||
if (item == Items.AIR) {
|
||||
continue;
|
||||
}
|
||||
|
||||
NonNullList<ItemStack> subBlocks = NonNullList.create();
|
||||
|
||||
block.getSubBlocks(CreativeTabs.SEARCH, subBlocks);
|
||||
|
||||
for (ItemStack subBlock : subBlocks) {
|
||||
if (CoverManager.isValidCover(subBlock)) {
|
||||
ItemStack stack = new ItemStack(this);
|
||||
|
||||
setItem(stack, subBlock);
|
||||
|
||||
items.add(stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumActionResult onItemUse(PlayerEntity player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
|
||||
ItemStack stack = player.getHeldItem(hand);
|
||||
|
||||
TileEntity tile = world.getTileEntity(pos);
|
||||
|
||||
// Support placing on the bottom side without too much hassle.
|
||||
if (!canPlaceOn(tile)) {
|
||||
pos = pos.up();
|
||||
|
||||
facing = EnumFacing.DOWN;
|
||||
|
||||
tile = world.getTileEntity(pos);
|
||||
}
|
||||
|
||||
if (canPlaceOn(tile)) {
|
||||
if (world.isRemote) {
|
||||
return EnumActionResult.SUCCESS;
|
||||
}
|
||||
|
||||
INetworkNode node = ((TileNode) tile).getNode();
|
||||
|
||||
if (node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, player)) {
|
||||
WorldUtils.sendNoPermissionMessage(player);
|
||||
|
||||
return EnumActionResult.FAIL;
|
||||
}
|
||||
|
||||
if (((ICoverable) node).getCoverManager().setCover(facing, createCover(getItem(stack)))) {
|
||||
player.getHeldItem(hand).shrink(1);
|
||||
|
||||
WorldUtils.updateBlock(world, pos);
|
||||
|
||||
return EnumActionResult.SUCCESS;
|
||||
}
|
||||
|
||||
return EnumActionResult.FAIL;
|
||||
}
|
||||
|
||||
return EnumActionResult.PASS;
|
||||
}
|
||||
|
||||
private boolean canPlaceOn(TileEntity tile) {
|
||||
return tile instanceof TileNode && ((TileNode) tile).getNode() instanceof ICoverable;
|
||||
}
|
||||
|
||||
protected Cover createCover(ItemStack stack) {
|
||||
return new Cover(stack, CoverType.NORMAL);
|
||||
}*/
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.item;
|
||||
|
||||
public class ItemHollowCover extends ItemCover {
|
||||
public ItemHollowCover() {
|
||||
super();
|
||||
}
|
||||
/* TODO
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerModels(IModelRegistration modelRegistration) {
|
||||
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Cover createCover(ItemStack stack) {
|
||||
return new Cover(stack, CoverType.HOLLOW);
|
||||
}*/
|
||||
}
|
||||
@@ -41,37 +41,6 @@ public class WrenchItem extends Item {
|
||||
|
||||
BlockState state = ctx.getWorld().getBlockState(ctx.getPos());
|
||||
|
||||
/* TODO - Covers
|
||||
if (block instanceof BlockCable && tile instanceof TileNode && ((TileNode) tile).getNode() instanceof ICoverable) {
|
||||
CoverManager manager = ((ICoverable) ((TileNode) tile).getNode()).getCoverManager();
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace(
|
||||
pos,
|
||||
AdvancedRayTracer.getStart(player),
|
||||
AdvancedRayTracer.getEnd(player),
|
||||
((BlockCable) block).getCollisions(tile, block.getActualState(state, world, pos))
|
||||
);
|
||||
|
||||
if (result != null && result.getGroup().getDirection() != null) {
|
||||
EnumFacing facingSelected = result.getGroup().getDirection();
|
||||
|
||||
if (manager.hasCover(facingSelected)) {
|
||||
ItemStack cover = manager.getCover(facingSelected).getType().createStack();
|
||||
|
||||
ItemCover.setItem(cover, manager.getCover(facingSelected).getStack());
|
||||
|
||||
manager.setCover(facingSelected, null);
|
||||
|
||||
WorldUtils.updateBlock(world, pos);
|
||||
|
||||
InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), cover);
|
||||
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
ctx.getWorld().setBlockState(ctx.getPos(), state.rotate(Rotation.CLOCKWISE_90));
|
||||
|
||||
return ActionResultType.SUCCESS;
|
||||
|
||||
@@ -48,12 +48,6 @@ public class ProxyCommon {
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void registerRecipes(RegistryEvent.Register<IRecipe> e) {
|
||||
e.getRegistry().register(new RecipeCover().setRegistryName(new ResourceLocation(RS.ID, "cover")));
|
||||
e.getRegistry().register(new RecipeHollowCover().setRegistryName(new ResourceLocation(RS.ID, "hollow_cover")));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onHarvestCheck(PlayerEvent.HarvestCheck e) {
|
||||
if (e.getTargetBlock().getBlock() instanceof BlockBase) {
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.recipe;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import net.minecraft.inventory.CraftingInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
||||
import net.minecraft.item.crafting.IRecipeType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class RecipeCover implements IRecipe<CraftingInventory> {
|
||||
@Override
|
||||
public boolean matches(CraftingInventory inv, World world) {
|
||||
boolean hadCuttingTool = false;
|
||||
boolean hadItem = false;
|
||||
|
||||
for (int i = 0; i < inv.getSizeInventory(); ++i) {
|
||||
ItemStack slot = inv.getStackInSlot(i);
|
||||
|
||||
if (!slot.isEmpty() && hadCuttingTool && hadItem) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (slot.getItem() == RSItems.CUTTING_TOOL) {
|
||||
if (hadCuttingTool) {
|
||||
return false;
|
||||
}
|
||||
|
||||
hadCuttingTool = true;
|
||||
}
|
||||
|
||||
if (CoverManager.isValidCover(slot)) {
|
||||
if (hadItem) {
|
||||
return false;
|
||||
}
|
||||
|
||||
hadItem = true;
|
||||
}
|
||||
}
|
||||
|
||||
return hadCuttingTool && hadItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getCraftingResult(CraftingInventory inv) {
|
||||
for (int i = 0; i < inv.getSizeInventory(); ++i) {
|
||||
ItemStack slot = inv.getStackInSlot(i);
|
||||
|
||||
if (CoverManager.isValidCover(slot)) {
|
||||
ItemStack cover = new ItemStack(RSItems.COVER, 6);
|
||||
|
||||
// TODO ItemCover.setItem(cover, ItemHandlerHelper.copyStackWithSize(slot, 1));
|
||||
|
||||
return cover;
|
||||
}
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canFit(int width, int height) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getRecipeOutput() {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getId() {
|
||||
return new ResourceLocation(RS.ID, "cover");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRecipeSerializer<?> getSerializer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRecipeType<?> getType() {
|
||||
return IRecipeType.CRAFTING;
|
||||
}
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.recipe;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import net.minecraft.inventory.CraftingInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
||||
import net.minecraft.item.crafting.IRecipeType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class RecipeHollowCover implements IRecipe<CraftingInventory> {
|
||||
protected boolean isValid(ItemStack slot, @Nullable ItemStack previousValidSlot) {
|
||||
// TODO ItemStack currentCover = ItemCover.getItem(slot);
|
||||
|
||||
/*if (slot.getItem() == RSItems.COVER && CoverManager.isValidCover(currentCover)) {
|
||||
if (previousValidSlot == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO ItemStack previousCover = ItemCover.getItem(previousValidSlot);
|
||||
|
||||
// TODO return previousCover.getItem() == currentCover.getItem();
|
||||
}*/
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CraftingInventory inv, World worldIn) {
|
||||
ItemStack previousValidSlot = null;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
ItemStack slot = inv.getStackInSlot(i);
|
||||
|
||||
if (i == 4) {
|
||||
if (!slot.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (isValid(slot, previousValidSlot)) {
|
||||
previousValidSlot = slot;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getCraftingResult(CraftingInventory inv) {
|
||||
ItemStack stack = new ItemStack(RSItems.HOLLOW_COVER, 8);
|
||||
|
||||
// TODO ItemHollowCover.setItem(stack, ItemCover.getItem(inv.getStackInSlot(0)));
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canFit(int width, int height) {
|
||||
return width == 3 && height == 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getRecipeOutput() {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getId() {
|
||||
return new ResourceLocation(RS.ID, "hollow_cover");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRecipeSerializer<?> getSerializer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRecipeType<?> getType() {
|
||||
return IRecipeType.CRAFTING;
|
||||
}
|
||||
}
|
||||
@@ -1,352 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.render;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
import net.minecraft.client.renderer.Vector3f;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||
import net.minecraft.client.renderer.vertex.VertexFormatElement;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraftforge.client.model.pipeline.UnpackedBakedQuad;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class CubeBuilder {
|
||||
public enum UvRotation {
|
||||
CLOCKWISE_0,
|
||||
CLOCKWISE_90,
|
||||
CLOCKWISE_180,
|
||||
CLOCKWISE_270
|
||||
}
|
||||
|
||||
private static class Uv {
|
||||
private float xFrom;
|
||||
private float xTo;
|
||||
private float yFrom;
|
||||
private float yTo;
|
||||
}
|
||||
|
||||
public static class Face {
|
||||
private Direction face;
|
||||
private TextureAtlasSprite sprite;
|
||||
private int light;
|
||||
private UvRotation uvRotation = UvRotation.CLOCKWISE_0;
|
||||
|
||||
public Face(Direction face, TextureAtlasSprite sprite) {
|
||||
this.face = face;
|
||||
this.sprite = sprite;
|
||||
}
|
||||
|
||||
public Face(Direction face, TextureAtlasSprite sprite, UvRotation uvRotation) {
|
||||
this(face, sprite);
|
||||
|
||||
this.uvRotation = uvRotation;
|
||||
}
|
||||
|
||||
public Face(Direction face, TextureAtlasSprite sprite, UvRotation uvRotation, int light) {
|
||||
this(face, sprite, uvRotation);
|
||||
|
||||
this.light = light;
|
||||
}
|
||||
}
|
||||
|
||||
private Vector3f from;
|
||||
private Vector3f to;
|
||||
private VertexFormat format = DefaultVertexFormats.ITEM;
|
||||
private Map<Direction, Face> faces = new HashMap<>();
|
||||
private int color = 0xFFFFFFFF;
|
||||
|
||||
public CubeBuilder from(float x, float y, float z) {
|
||||
this.from = new Vector3f(x / 16, y / 16, z / 16);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public CubeBuilder to(float x, float y, float z) {
|
||||
this.to = new Vector3f(x / 16, y / 16, z / 16);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public CubeBuilder color(int color) {
|
||||
this.color = color;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public CubeBuilder lightmap() {
|
||||
this.format = RenderUtils.getFormatWithLightMap(format);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public CubeBuilder addFaces(Function<Direction, Face> faceSupplier) {
|
||||
for (Direction facing : Direction.values()) {
|
||||
addFace(faceSupplier.apply(facing));
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public CubeBuilder addFace(Face face) {
|
||||
faces.put(face.face, face);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<BakedQuad> bake() {
|
||||
List<BakedQuad> quads = new ArrayList<>();
|
||||
|
||||
for (Map.Entry<Direction, Face> entry : faces.entrySet()) {
|
||||
quads.add(bakeFace(entry.getKey(), entry.getValue()));
|
||||
}
|
||||
|
||||
return quads;
|
||||
}
|
||||
|
||||
private BakedQuad bakeFace(Direction facing, Face cubeFace) {
|
||||
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(format);
|
||||
|
||||
builder.setTexture(cubeFace.sprite);
|
||||
builder.setQuadOrientation(facing);
|
||||
builder.setQuadTint(-1);
|
||||
builder.setApplyDiffuseLighting(true);
|
||||
|
||||
Uv uv = getDefaultUv(facing, cubeFace.sprite, from.getX(), from.getY(), from.getZ(), to.getX(), to.getY(), to.getZ());
|
||||
|
||||
switch (facing) {
|
||||
case DOWN:
|
||||
addVertexTopRight(builder, cubeFace, to.getX(), from.getY(), from.getZ(), uv);
|
||||
addVertexBottomRight(builder, cubeFace, to.getX(), from.getY(), to.getZ(), uv);
|
||||
addVertexBottomLeft(builder, cubeFace, from.getX(), from.getY(), to.getZ(), uv);
|
||||
addVertexTopLeft(builder, cubeFace, from.getX(), from.getY(), from.getZ(), uv);
|
||||
break;
|
||||
case UP:
|
||||
addVertexTopLeft(builder, cubeFace, from.getX(), to.getY(), from.getZ(), uv);
|
||||
addVertexBottomLeft(builder, cubeFace, from.getX(), to.getY(), to.getZ(), uv);
|
||||
addVertexBottomRight(builder, cubeFace, to.getX(), to.getY(), to.getZ(), uv);
|
||||
addVertexTopRight(builder, cubeFace, to.getX(), to.getY(), from.getZ(), uv);
|
||||
break;
|
||||
case NORTH:
|
||||
addVertexBottomRight(builder, cubeFace, to.getX(), to.getY(), from.getZ(), uv);
|
||||
addVertexTopRight(builder, cubeFace, to.getX(), from.getY(), from.getZ(), uv);
|
||||
addVertexTopLeft(builder, cubeFace, from.getX(), from.getY(), from.getZ(), uv);
|
||||
addVertexBottomLeft(builder, cubeFace, from.getX(), to.getY(), from.getZ(), uv);
|
||||
break;
|
||||
case SOUTH:
|
||||
addVertexBottomLeft(builder, cubeFace, from.getX(), to.getY(), to.getZ(), uv);
|
||||
addVertexTopLeft(builder, cubeFace, from.getX(), from.getY(), to.getZ(), uv);
|
||||
addVertexTopRight(builder, cubeFace, to.getX(), from.getY(), to.getZ(), uv);
|
||||
addVertexBottomRight(builder, cubeFace, to.getX(), to.getY(), to.getZ(), uv);
|
||||
break;
|
||||
case WEST:
|
||||
addVertexTopLeft(builder, cubeFace, from.getX(), from.getY(), from.getZ(), uv);
|
||||
addVertexTopRight(builder, cubeFace, from.getX(), from.getY(), to.getZ(), uv);
|
||||
addVertexBottomRight(builder, cubeFace, from.getX(), to.getY(), to.getZ(), uv);
|
||||
addVertexBottomLeft(builder, cubeFace, from.getX(), to.getY(), from.getZ(), uv);
|
||||
break;
|
||||
case EAST:
|
||||
addVertexBottomRight(builder, cubeFace, to.getX(), to.getY(), from.getZ(), uv);
|
||||
addVertexBottomLeft(builder, cubeFace, to.getX(), to.getY(), to.getZ(), uv);
|
||||
addVertexTopLeft(builder, cubeFace, to.getX(), from.getY(), to.getZ(), uv);
|
||||
addVertexTopRight(builder, cubeFace, to.getX(), from.getY(), from.getZ(), uv);
|
||||
break;
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private Uv getDefaultUv(Direction face, TextureAtlasSprite texture, float fromX, float fromY, float fromZ, float toX, float toY, float toZ) {
|
||||
Uv uv = new Uv();
|
||||
|
||||
switch (face) {
|
||||
case DOWN:
|
||||
uv.xFrom = texture.getInterpolatedU(fromX * 16);
|
||||
uv.yFrom = texture.getInterpolatedV(16 - fromZ * 16);
|
||||
uv.xTo = texture.getInterpolatedU(toX * 16);
|
||||
uv.yTo = texture.getInterpolatedV(16 - toZ * 16);
|
||||
break;
|
||||
case UP:
|
||||
uv.xFrom = texture.getInterpolatedU(fromX * 16);
|
||||
uv.yFrom = texture.getInterpolatedV(fromZ * 16);
|
||||
uv.xTo = texture.getInterpolatedU(toX * 16);
|
||||
uv.yTo = texture.getInterpolatedV(toZ * 16);
|
||||
break;
|
||||
case NORTH:
|
||||
uv.xFrom = texture.getInterpolatedU(16 - fromX * 16);
|
||||
uv.yFrom = texture.getInterpolatedV(16 - fromY * 16);
|
||||
uv.xTo = texture.getInterpolatedU(16 - toX * 16);
|
||||
uv.yTo = texture.getInterpolatedV(16 - toY * 16);
|
||||
break;
|
||||
case SOUTH:
|
||||
uv.xFrom = texture.getInterpolatedU(fromX * 16);
|
||||
uv.yFrom = texture.getInterpolatedV(16 - fromY * 16);
|
||||
uv.xTo = texture.getInterpolatedU(toX * 16);
|
||||
uv.yTo = texture.getInterpolatedV(16 - toY * 16);
|
||||
break;
|
||||
case WEST:
|
||||
uv.xFrom = texture.getInterpolatedU(fromZ * 16);
|
||||
uv.yFrom = texture.getInterpolatedV(16 - fromY * 16);
|
||||
uv.xTo = texture.getInterpolatedU(toZ * 16);
|
||||
uv.yTo = texture.getInterpolatedV(16 - toY * 16);
|
||||
break;
|
||||
case EAST:
|
||||
uv.xFrom = texture.getInterpolatedU(16 - toZ * 16);
|
||||
uv.yFrom = texture.getInterpolatedV(16 - fromY * 16);
|
||||
uv.xTo = texture.getInterpolatedU(16 - fromZ * 16);
|
||||
uv.yTo = texture.getInterpolatedV(16 - toY * 16);
|
||||
break;
|
||||
}
|
||||
|
||||
return uv;
|
||||
}
|
||||
|
||||
private void addVertexTopLeft(UnpackedBakedQuad.Builder builder, Face face, float x, float y, float z, Uv uv) {
|
||||
float u;
|
||||
float v;
|
||||
|
||||
switch (face.uvRotation) {
|
||||
default:
|
||||
case CLOCKWISE_0:
|
||||
u = uv.xFrom;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
case CLOCKWISE_90:
|
||||
u = uv.xFrom;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
case CLOCKWISE_180:
|
||||
u = uv.xTo;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
case CLOCKWISE_270:
|
||||
u = uv.xTo;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
}
|
||||
|
||||
addVertex(builder, face, x, y, z, u, v);
|
||||
}
|
||||
|
||||
private void addVertexTopRight(UnpackedBakedQuad.Builder builder, Face face, float x, float y, float z, Uv uv) {
|
||||
float u;
|
||||
float v;
|
||||
|
||||
switch (face.uvRotation) {
|
||||
default:
|
||||
case CLOCKWISE_0:
|
||||
u = uv.xTo;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
case CLOCKWISE_90:
|
||||
u = uv.xFrom;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
case CLOCKWISE_180:
|
||||
u = uv.xFrom;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
case CLOCKWISE_270:
|
||||
u = uv.xTo;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
}
|
||||
|
||||
addVertex(builder, face, x, y, z, u, v);
|
||||
}
|
||||
|
||||
private void addVertexBottomRight(UnpackedBakedQuad.Builder builder, Face face, float x, float y, float z, Uv uv) {
|
||||
float u;
|
||||
float v;
|
||||
|
||||
switch (face.uvRotation) {
|
||||
default:
|
||||
case CLOCKWISE_0:
|
||||
u = uv.xTo;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
case CLOCKWISE_90:
|
||||
u = uv.xTo;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
case CLOCKWISE_180:
|
||||
u = uv.xFrom;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
case CLOCKWISE_270:
|
||||
u = uv.xFrom;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
}
|
||||
|
||||
addVertex(builder, face, x, y, z, u, v);
|
||||
}
|
||||
|
||||
private void addVertexBottomLeft(UnpackedBakedQuad.Builder builder, Face face, float x, float y, float z, Uv uv) {
|
||||
float u;
|
||||
float v;
|
||||
|
||||
switch (face.uvRotation) {
|
||||
default:
|
||||
case CLOCKWISE_0:
|
||||
u = uv.xFrom;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
case CLOCKWISE_90:
|
||||
u = uv.xTo;
|
||||
v = uv.yTo;
|
||||
break;
|
||||
case CLOCKWISE_180:
|
||||
u = uv.xTo;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
case CLOCKWISE_270:
|
||||
u = uv.xFrom;
|
||||
v = uv.yFrom;
|
||||
break;
|
||||
}
|
||||
|
||||
addVertex(builder, face, x, y, z, u, v);
|
||||
}
|
||||
|
||||
private void addVertex(UnpackedBakedQuad.Builder builder, Face face, float x, float y, float z, float u, float v) {
|
||||
VertexFormat format = builder.getVertexFormat();
|
||||
|
||||
for (int i = 0; i < format.getElementCount(); i++) {
|
||||
VertexFormatElement e = format.getElement(i);
|
||||
|
||||
switch (e.getUsage()) {
|
||||
case POSITION:
|
||||
builder.put(i, x, y, z);
|
||||
break;
|
||||
case NORMAL:
|
||||
builder.put(i, face.face.getXOffset(), face.face.getYOffset(), face.face.getZOffset());
|
||||
break;
|
||||
case COLOR:
|
||||
float r = (color >> 16 & 0xFF) / 255F;
|
||||
float g = (color >> 8 & 0xFF) / 255F;
|
||||
float b = (color & 0xFF) / 255F;
|
||||
float a = (color >> 24 & 0xFF) / 255F;
|
||||
|
||||
builder.put(i, r, g, b, a);
|
||||
break;
|
||||
case UV:
|
||||
if (e.getIndex() == 0) {
|
||||
builder.put(i, u, v);
|
||||
} else {
|
||||
builder.put(i, (float) (face.light * 0x20) / 0xFFFF, (float) (face.light * 0x20) / 0xFFFF);
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
builder.put(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverType;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.model.IUnbakedModel;
|
||||
import net.minecraft.client.renderer.model.ModelBakery;
|
||||
import net.minecraft.client.renderer.texture.ISprite;
|
||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class ModelCover implements IUnbakedModel {
|
||||
private CoverType coverType;
|
||||
|
||||
public ModelCover(CoverType coverType) {
|
||||
this.coverType = coverType;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format) {
|
||||
return null;
|
||||
//return new BakedModelCover(null, coverType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ResourceLocation> getDependencies() {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ResourceLocation> getTextures(Function<ResourceLocation, IUnbakedModel> modelGetter, Set<String> missingTextureErrors) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
@@ -1,338 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model.baked;
|
||||
|
||||
/*
|
||||
public class BakedModelCableCover extends BakedModelDelegate {
|
||||
private static TextureAtlasSprite BORDER_SPRITE;
|
||||
|
||||
public BakedModelCableCover(IBakedModel base) {
|
||||
super(base);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, long rand) {
|
||||
List<BakedQuad> quads = new ArrayList<>(base.getQuads(state, side, rand));
|
||||
|
||||
if (state != null) {
|
||||
IExtendedBlockState extendedState = (IExtendedBlockState) state;
|
||||
|
||||
addCover(quads, extendedState.getValue(BlockCable.COVER_NORTH), Direction.NORTH, side, rand, extendedState, true);
|
||||
addCover(quads, extendedState.getValue(BlockCable.COVER_SOUTH), Direction.SOUTH, side, rand, extendedState, true);
|
||||
addCover(quads, extendedState.getValue(BlockCable.COVER_EAST), Direction.EAST, side, rand, extendedState, true);
|
||||
addCover(quads, extendedState.getValue(BlockCable.COVER_WEST), Direction.WEST, side, rand, extendedState, true);
|
||||
addCover(quads, extendedState.getValue(BlockCable.COVER_DOWN), Direction.DOWN, side, rand, extendedState, true);
|
||||
addCover(quads, extendedState.getValue(BlockCable.COVER_UP), Direction.UP, side, rand, extendedState, true);
|
||||
}
|
||||
|
||||
return quads;
|
||||
}
|
||||
|
||||
private static int getHollowCoverSize(@Nullable BlockState state, Direction coverSide) {
|
||||
if (state == null) {
|
||||
return 6;
|
||||
}
|
||||
|
||||
BlockBase block = (BlockBase) state.getBlock();
|
||||
|
||||
if (block.getDirection() != null && state.getValue(block.getDirection().getProperty()) == coverSide) {
|
||||
if (block == RSBlocks.CABLE || block == RSBlocks.EXPORTER) {
|
||||
return 6;
|
||||
} else if (block == RSBlocks.EXTERNAL_STORAGE || block == RSBlocks.IMPORTER) {
|
||||
return 3;
|
||||
} else if (block == RSBlocks.CONSTRUCTOR || block == RSBlocks.DESTRUCTOR || block == RSBlocks.READER || block == RSBlocks.WRITER) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
return 6;
|
||||
}
|
||||
|
||||
protected static void addCover(List<BakedQuad> quads, @Nullable Cover cover, Direction coverSide, Direction side, long rand, @Nullable IExtendedBlockState state, boolean handle) {
|
||||
if (cover == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
BlockState coverState = CoverManager.getBlockState(cover.getStack());
|
||||
|
||||
if (coverState == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean hasUp = false, hasDown = false, hasEast = false, hasWest = false;
|
||||
|
||||
if (state != null) {
|
||||
hasUp = state.getValue(BlockCable.COVER_UP) != null;
|
||||
hasDown = state.getValue(BlockCable.COVER_DOWN) != null;
|
||||
hasEast = state.getValue(BlockCable.COVER_EAST) != null;
|
||||
hasWest = state.getValue(BlockCable.COVER_WEST) != null;
|
||||
}
|
||||
|
||||
TextureAtlasSprite sprite = RenderUtils.getSprite(Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState(coverState), coverState, side, rand);
|
||||
|
||||
switch (cover.getType()) {
|
||||
case NORMAL:
|
||||
addNormalCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, handle);
|
||||
break;
|
||||
case HOLLOW:
|
||||
addHollowCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, getHollowCoverSize(state, coverSide));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void addNormalCover(List<BakedQuad> quads, TextureAtlasSprite sprite, Direction coverSide, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, boolean handle) {
|
||||
AxisAlignedBB bounds = ConstantsCable.getCoverBounds(coverSide);
|
||||
|
||||
Vector3f from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16);
|
||||
Vector3f to = new Vector3f((float) bounds.maxX * 16, (float) bounds.maxY * 16, (float) bounds.maxZ * 16);
|
||||
|
||||
if (coverSide == Direction.NORTH) {
|
||||
if (hasWest) {
|
||||
from.setX(2);
|
||||
}
|
||||
|
||||
if (hasEast) {
|
||||
to.setX(14);
|
||||
}
|
||||
} else if (coverSide == Direction.SOUTH) {
|
||||
if (hasWest) {
|
||||
from.setX(2);
|
||||
}
|
||||
|
||||
if (hasEast) {
|
||||
to.setX(14);
|
||||
}
|
||||
}
|
||||
|
||||
if (coverSide.getAxis() != Direction.Axis.Y) {
|
||||
if (hasDown) {
|
||||
from.setY(2);
|
||||
}
|
||||
|
||||
if (hasUp) {
|
||||
to.setY(14);
|
||||
}
|
||||
}
|
||||
|
||||
quads.addAll(new CubeBuilder().from(from.getX(), from.getY(), from.getZ()).to(to.getX(), to.getY(), to.getZ()).addFaces(face -> new CubeBuilder.Face(face, sprite)).bake());
|
||||
|
||||
if (handle) {
|
||||
if (BORDER_SPRITE == null) {
|
||||
BORDER_SPRITE = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(RS.ID + ":blocks/cable_part_border");
|
||||
}
|
||||
|
||||
bounds = ConstantsCable.getHolderBounds(coverSide);
|
||||
|
||||
from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16);
|
||||
to = new Vector3f((float) bounds.maxX * 16, (float) bounds.maxY * 16, (float) bounds.maxZ * 16);
|
||||
|
||||
quads.addAll(new CubeBuilder().from(from.getX(), from.getY(), from.getZ()).to(to.getX(), to.getY(), to.getZ()).addFaces(face -> new CubeBuilder.Face(face, BORDER_SPRITE)).bake());
|
||||
}
|
||||
}
|
||||
|
||||
private static void addHollowCover(List<BakedQuad> quads, TextureAtlasSprite sprite, Direction coverSide, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, int size) {
|
||||
AxisAlignedBB bounds = ConstantsCable.getCoverBounds(coverSide);
|
||||
|
||||
Vector3f from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16);
|
||||
Vector3f to = new Vector3f((float) bounds.maxX * 16, (float) bounds.maxY * 16, (float) bounds.maxZ * 16);
|
||||
|
||||
if (coverSide.getAxis() != Direction.Axis.Y) {
|
||||
if (hasDown) {
|
||||
from.setY(2);
|
||||
}
|
||||
|
||||
if (hasUp) {
|
||||
to.setY(14);
|
||||
}
|
||||
}
|
||||
|
||||
// Right
|
||||
if (coverSide == Direction.NORTH) {
|
||||
if (hasWest) {
|
||||
from.setX(2);
|
||||
} else {
|
||||
from.setX(0);
|
||||
}
|
||||
|
||||
to.setX(size);
|
||||
} else if (coverSide == Direction.SOUTH) {
|
||||
if (hasEast) {
|
||||
to.setX(14);
|
||||
} else {
|
||||
to.setX(16);
|
||||
}
|
||||
|
||||
from.setX(16 - size);
|
||||
} else if (coverSide == Direction.EAST) {
|
||||
from.setZ(0);
|
||||
to.setZ(size);
|
||||
} else if (coverSide == Direction.WEST) {
|
||||
from.setZ(16 - size);
|
||||
to.setZ(16);
|
||||
} else if (coverSide == Direction.DOWN || coverSide == Direction.UP) {
|
||||
from.setZ(16 - size);
|
||||
to.setZ(16);
|
||||
}
|
||||
|
||||
quads.addAll(new CubeBuilder()
|
||||
.from(from.getX(), from.getY(), from.getZ())
|
||||
.to(to.getX(), to.getY(), to.getZ())
|
||||
.addFaces(face -> new CubeBuilder.Face(face, sprite))
|
||||
.bake()
|
||||
);
|
||||
|
||||
// Left
|
||||
if (coverSide == Direction.NORTH) {
|
||||
if (hasEast) {
|
||||
to.setX(14);
|
||||
} else {
|
||||
to.setX(16);
|
||||
}
|
||||
|
||||
from.setX(16 - size);
|
||||
} else if (coverSide == Direction.SOUTH) {
|
||||
if (hasWest) {
|
||||
from.setX(2);
|
||||
} else {
|
||||
from.setX(0);
|
||||
}
|
||||
|
||||
to.setX(size);
|
||||
} else if (coverSide == Direction.EAST) {
|
||||
from.setZ(16 - size);
|
||||
to.setZ(16);
|
||||
} else if (coverSide == Direction.WEST) {
|
||||
from.setZ(0);
|
||||
to.setZ(size);
|
||||
} else if (coverSide == Direction.DOWN || coverSide == Direction.UP) {
|
||||
from.setZ(0);
|
||||
to.setZ(size);
|
||||
}
|
||||
|
||||
quads.addAll(new CubeBuilder()
|
||||
.from(from.getX(), from.getY(), from.getZ())
|
||||
.to(to.getX(), to.getY(), to.getZ())
|
||||
.addFaces(face -> new CubeBuilder.Face(face, sprite))
|
||||
.bake()
|
||||
);
|
||||
|
||||
// Bottom
|
||||
if (coverSide == Direction.NORTH) {
|
||||
from.setX(size);
|
||||
to.setX(16 - size);
|
||||
|
||||
if (hasDown) {
|
||||
from.setY(2);
|
||||
} else {
|
||||
from.setY(0);
|
||||
}
|
||||
|
||||
to.setY(size);
|
||||
} else if (coverSide == Direction.SOUTH) {
|
||||
from.setX(size);
|
||||
to.setX(16 - size);
|
||||
|
||||
if (hasDown) {
|
||||
from.setY(2);
|
||||
} else {
|
||||
from.setY(0);
|
||||
}
|
||||
|
||||
to.setY(size);
|
||||
} else if (coverSide == Direction.EAST) {
|
||||
from.setZ(size);
|
||||
to.setZ(16 - size);
|
||||
|
||||
if (hasDown) {
|
||||
from.setY(2);
|
||||
} else {
|
||||
from.setY(0);
|
||||
}
|
||||
|
||||
to.setY(size);
|
||||
} else if (coverSide == Direction.WEST) {
|
||||
from.setZ(size);
|
||||
to.setZ(16 - size);
|
||||
|
||||
if (hasDown) {
|
||||
from.setY(2);
|
||||
} else {
|
||||
from.setY(0);
|
||||
}
|
||||
|
||||
to.setY(size);
|
||||
} else if (coverSide == Direction.DOWN || coverSide == Direction.UP) {
|
||||
from.setZ(size);
|
||||
to.setZ(16 - size);
|
||||
|
||||
from.setX(0);
|
||||
to.setX(size);
|
||||
}
|
||||
|
||||
quads.addAll(new CubeBuilder()
|
||||
.from(from.getX(), from.getY(), from.getZ())
|
||||
.to(to.getX(), to.getY(), to.getZ())
|
||||
.addFaces(face -> new CubeBuilder.Face(face, sprite))
|
||||
.bake()
|
||||
);
|
||||
|
||||
// Up
|
||||
if (coverSide == Direction.NORTH) {
|
||||
from.setX(size);
|
||||
to.setX(16 - size);
|
||||
|
||||
if (hasUp) {
|
||||
to.setY(14);
|
||||
} else {
|
||||
to.setY(16);
|
||||
}
|
||||
|
||||
from.setY(16 - size);
|
||||
} else if (coverSide == Direction.SOUTH) {
|
||||
from.setX(size);
|
||||
to.setX(16 - size);
|
||||
|
||||
if (hasUp) {
|
||||
to.setY(14);
|
||||
} else {
|
||||
to.setY(16);
|
||||
}
|
||||
|
||||
from.setY(16 - size);
|
||||
} else if (coverSide == Direction.EAST) {
|
||||
from.setZ(size);
|
||||
to.setZ(16 - size);
|
||||
|
||||
if (hasUp) {
|
||||
to.setY(14);
|
||||
} else {
|
||||
to.setY(16);
|
||||
}
|
||||
|
||||
from.setY(16 - size);
|
||||
} else if (coverSide == Direction.WEST) {
|
||||
from.setZ(size);
|
||||
to.setZ(16 - size);
|
||||
|
||||
if (hasUp) {
|
||||
to.setY(14);
|
||||
} else {
|
||||
to.setY(16);
|
||||
}
|
||||
|
||||
from.setY(16 - size);
|
||||
} else if (coverSide == Direction.DOWN || coverSide == Direction.UP) {
|
||||
from.setZ(size);
|
||||
to.setZ(16 - size);
|
||||
|
||||
from.setX(16 - size);
|
||||
to.setX(16);
|
||||
}
|
||||
|
||||
quads.addAll(new CubeBuilder()
|
||||
.from(from.getX(), from.getY(), from.getZ())
|
||||
.to(to.getX(), to.getY(), to.getZ())
|
||||
.addFaces(face -> new CubeBuilder.Face(face, sprite))
|
||||
.bake()
|
||||
);
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,154 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model.baked;
|
||||
/*
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.Cover;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverType;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemCover;
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
import net.minecraft.block.state.BlockState;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
||||
import net.minecraft.client.renderer.block.model.ItemOverrideList;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.model.TRSRTransformation;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.vecmath.Matrix4f;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class BakedModelCover extends BakedModelCableCover {
|
||||
private class CacheKey {
|
||||
private BlockState state;
|
||||
private ItemStack stack;
|
||||
private Direction side;
|
||||
private CoverType type;
|
||||
|
||||
CacheKey(BlockState state, ItemStack stack, Direction side, CoverType type) {
|
||||
this.state = state;
|
||||
this.stack = stack;
|
||||
this.side = side;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BakedModelCover.CacheKey cacheKey = (BakedModelCover.CacheKey) o;
|
||||
|
||||
return cacheKey.type == type && cacheKey.stack.getItem() == stack.getItem() && cacheKey.stack.getItemDamage() == stack.getItemDamage() && cacheKey.side == side && Objects.equals(cacheKey.state, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = stack.getItem().hashCode();
|
||||
result = 31 * result + stack.getItemDamage();
|
||||
result = 31 * result + (side != null ? side.hashCode() : 0);
|
||||
result = 31 * result + (state != null ? state.hashCode() : 0);
|
||||
result = 31 * result + type.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static final LoadingCache<CacheKey, List<BakedQuad>> CACHE = CacheBuilder.newBuilder().build(new CacheLoader<CacheKey, List<BakedQuad>>() {
|
||||
@Override
|
||||
public List<BakedQuad> load(CacheKey key) {
|
||||
List<BakedQuad> quads = new ArrayList<>();
|
||||
|
||||
addCover(quads, new Cover(key.stack, key.type), Direction.NORTH, key.side, 0, null, false);
|
||||
|
||||
return quads;
|
||||
}
|
||||
});
|
||||
|
||||
@Nullable
|
||||
private ItemStack stack;
|
||||
private CoverType type;
|
||||
|
||||
public BakedModelCover(@Nullable ItemStack stack, CoverType type) {
|
||||
super(null);
|
||||
|
||||
this.stack = stack;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, long rand) {
|
||||
if (stack == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
CacheKey key = new CacheKey(state, ItemCover.getItem(stack), side, type);
|
||||
|
||||
return CACHE.getUnchecked(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
if (stack != null) {
|
||||
return ItemOverrideList.NONE;
|
||||
}
|
||||
|
||||
return new ItemOverrideList(Collections.emptyList()) {
|
||||
@Override
|
||||
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, @Nullable World world, @Nullable EntityLivingBase entity) {
|
||||
return new BakedModelCover(stack, type);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
|
||||
TRSRTransformation transform = RenderUtils.getDefaultBlockTransforms().get(cameraTransformType);
|
||||
|
||||
return Pair.of(this, transform == null ? RenderUtils.EMPTY_MATRIX_TRANSFORM : transform.getMatrix());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemCameraTransforms getItemCameraTransforms() {
|
||||
return ItemCameraTransforms.DEFAULT;
|
||||
}
|
||||
}*/
|
||||
@@ -1,40 +0,0 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model.loader;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverType;
|
||||
import com.raoulvdberge.refinedstorage.render.model.ModelCover;
|
||||
import net.minecraft.client.renderer.model.IUnbakedModel;
|
||||
import net.minecraft.resources.IResourceManager;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.ICustomModelLoader;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class CoverCustomModelLoader implements ICustomModelLoader {
|
||||
@Override
|
||||
public void onResourceManagerReload(IResourceManager resourceManager) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accepts(ResourceLocation modelLocation) {
|
||||
return modelLocation.getNamespace().equals(RS.ID) && getType(modelLocation) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IUnbakedModel loadModel(ResourceLocation modelLocation) {
|
||||
return new ModelCover(getType(modelLocation));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private CoverType getType(ResourceLocation modelLocation) {
|
||||
switch (modelLocation.getPath()) {
|
||||
case "cover":
|
||||
return CoverType.NORMAL;
|
||||
case "hollow_cover":
|
||||
return CoverType.HOLLOW;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.FluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.ItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.ICoverable;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache;
|
||||
@@ -46,7 +45,6 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@@ -677,24 +675,7 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe
|
||||
@Override
|
||||
public void visit(Operator operator) {
|
||||
for (Direction facing : Direction.values()) {
|
||||
BlockPos pos = this.pos.offset(facing);
|
||||
|
||||
TileEntity tile = world.getTileEntity(pos);
|
||||
|
||||
// Little hack to support not conducting through covers (if the cover is right next to the controller).
|
||||
if (tile != null) {
|
||||
INetworkNodeProxy otherNodeProxy = tile.getCapability(NETWORK_NODE_PROXY_CAPABILITY).orElse(null);
|
||||
|
||||
if (otherNodeProxy != null) {
|
||||
INetworkNode otherNode = otherNodeProxy.getNode();
|
||||
|
||||
if (otherNode instanceof ICoverable && ((ICoverable) otherNode).getCoverManager().hasCover(facing.getOpposite())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
operator.apply(world, pos, facing.getOpposite());
|
||||
operator.apply(world, pos.offset(facing), facing.getOpposite());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,20 +5,17 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.ICoverable;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.capability.NetworkNodeProxyCapability;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -27,8 +24,6 @@ import javax.annotation.Nullable;
|
||||
public abstract class NetworkNodeTile<N extends NetworkNode> extends BaseTile implements INetworkNodeProxy<N>, IRedstoneConfigurable {
|
||||
public static final TileDataParameter<Integer, NetworkNodeTile> REDSTONE_MODE = RedstoneMode.createParameter();
|
||||
|
||||
private static final String NBT_COVERS = "Cover";
|
||||
|
||||
private N clientNode;
|
||||
|
||||
private LazyOptional<INetworkNodeProxy<N>> networkNodeProxy = LazyOptional.of(() -> this);
|
||||
@@ -51,24 +46,6 @@ public abstract class NetworkNodeTile<N extends NetworkNode> extends BaseTile im
|
||||
getNode().setRedstoneMode(mode);
|
||||
}
|
||||
|
||||
public CompoundNBT writeUpdate(CompoundNBT tag) {
|
||||
super.writeUpdate(tag);
|
||||
|
||||
if (getNode() instanceof ICoverable) {
|
||||
tag.put(NBT_COVERS, ((ICoverable) getNode()).getCoverManager().writeToNbt());
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
public void readUpdate(CompoundNBT tag) {
|
||||
super.readUpdate(tag);
|
||||
|
||||
if (getNode() instanceof ICoverable && tag.contains(NBT_COVERS)) {
|
||||
((ICoverable) getNode()).getCoverManager().readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
@@ -4,27 +4,18 @@ import com.google.common.collect.Lists;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.texture.MissingTextureSprite;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||
import net.minecraft.client.util.ITooltipFlag;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.BlockRenderLayer;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.text.Style;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
import net.minecraftforge.client.MinecraftForgeClient;
|
||||
import net.minecraftforge.client.event.RenderTooltipEvent;
|
||||
import net.minecraftforge.common.ForgeMod;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
@@ -34,7 +25,6 @@ import net.minecraftforge.fml.client.config.GuiUtils;
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
public final class RenderUtils {
|
||||
@@ -275,51 +265,6 @@ public final class RenderUtils {
|
||||
return format;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static TextureAtlasSprite getSprite(IBakedModel coverModel, BlockState coverState, Direction facing, Random rand) {
|
||||
TextureAtlasSprite sprite = null;
|
||||
|
||||
BlockRenderLayer originalLayer = MinecraftForgeClient.getRenderLayer();
|
||||
|
||||
try {
|
||||
for (BlockRenderLayer layer : BlockRenderLayer.values()) {
|
||||
ForgeHooksClient.setRenderLayer(layer);
|
||||
|
||||
for (BakedQuad bakedQuad : coverModel.getQuads(coverState, facing, rand)) {
|
||||
return bakedQuad.getSprite();
|
||||
}
|
||||
|
||||
for (BakedQuad bakedQuad : coverModel.getQuads(coverState, null, rand)) {
|
||||
if (sprite == null) {
|
||||
sprite = bakedQuad.getSprite();
|
||||
}
|
||||
|
||||
if (bakedQuad.getFace() == facing) {
|
||||
return bakedQuad.getSprite();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// NO OP
|
||||
} finally {
|
||||
ForgeHooksClient.setRenderLayer(originalLayer);
|
||||
}
|
||||
|
||||
if (sprite == null) {
|
||||
try {
|
||||
sprite = coverModel.getParticleTexture();
|
||||
} catch (Exception e) {
|
||||
// NO OP
|
||||
}
|
||||
}
|
||||
|
||||
if (sprite == null) {
|
||||
sprite = MissingTextureSprite.func_217790_a();
|
||||
}
|
||||
|
||||
return sprite;
|
||||
}
|
||||
|
||||
public static boolean inBounds(int x, int y, int w, int h, double ox, double oy) {
|
||||
return ox >= x && ox <= x + w && oy >= y && oy <= y + h;
|
||||
}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"textures": {
|
||||
"cable": "refinedstorage:blocks/cable"
|
||||
},
|
||||
"model": "refinedstorage:cable_core",
|
||||
"uvlock": true
|
||||
},
|
||||
"variants": {
|
||||
"inventory": [
|
||||
{
|
||||
"model": "refinedstorage:cable_core",
|
||||
"transform": "forge:default-block"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"textures": {
|
||||
"cable": "refinedstorage:blocks/cable"
|
||||
},
|
||||
"model": "refinedstorage:cable_core",
|
||||
"uvlock": true
|
||||
},
|
||||
"variants": {
|
||||
"inventory": [
|
||||
{
|
||||
"model": "refinedstorage:cable_core",
|
||||
"transform": "forge:default-block"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -269,9 +269,6 @@
|
||||
"item.refinedstorage.wrench": "Wrench",
|
||||
"item.refinedstorage.security_card": "Security Card",
|
||||
"item.refinedstorage.security_card.owner": "Bound to: %s",
|
||||
"item.refinedstorage.cutting_tool": "Cutting Tool",
|
||||
"item.refinedstorage:cover": "Cover",
|
||||
"item.refinedstorage:hollow_cover": "Hollow Cover",
|
||||
"item.refinedstorage.processor_binding": "Processor Binding",
|
||||
"commands.refinedstorage.createdisk.usage": "/createdisk <player> <item> <metadata> <id>",
|
||||
"commands.refinedstorage.createdisk.error.notADisk": "The given disk item is not a disk.",
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "refinedstorage:item/cutting_tool"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
" E",
|
||||
" S ",
|
||||
"S "
|
||||
],
|
||||
"key": {
|
||||
"S": {
|
||||
"tag": "forge:rods/wooden"
|
||||
},
|
||||
"E": {
|
||||
"item": "refinedstorage:quartz_enriched_iron"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "refinedstorage:cutting_tool"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user