mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
stack matching settings for extractor crane
This commit is contained in:
parent
02761a12cf
commit
8a080a037f
@ -5,17 +5,17 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntitytemWaste extends EntityItem {
|
||||
public class EntityItemWaste extends EntityItem {
|
||||
|
||||
public EntitytemWaste(World world) {
|
||||
public EntityItemWaste(World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
public EntitytemWaste(World world, double x, double y, double z) {
|
||||
public EntityItemWaste(World world, double x, double y, double z) {
|
||||
super(world, x, y, z);
|
||||
}
|
||||
|
||||
public EntitytemWaste(World world, double x, double y, double z, ItemStack stack) {
|
||||
public EntityItemWaste(World world, double x, double y, double z, ItemStack stack) {
|
||||
super(world, x, y, z, stack);
|
||||
}
|
||||
|
||||
@ -12,10 +12,10 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerCraneExtractor extends Container {
|
||||
|
||||
protected TileEntityCraneExtractor inserter;
|
||||
protected TileEntityCraneExtractor extractor;
|
||||
|
||||
public ContainerCraneExtractor(InventoryPlayer invPlayer, TileEntityCraneExtractor inserter) {
|
||||
this.inserter = inserter;
|
||||
this.extractor = inserter;
|
||||
|
||||
//filter
|
||||
for(int i = 0; i < 3; i++) {
|
||||
@ -59,8 +59,8 @@ public class ContainerCraneExtractor extends Container {
|
||||
return null;
|
||||
}
|
||||
|
||||
if(slot <= inserter.getSizeInventory() - 1) {
|
||||
if(!this.mergeItemStack(var5, inserter.getSizeInventory(), this.inventorySlots.size(), true)) {
|
||||
if(slot <= extractor.getSizeInventory() - 1) {
|
||||
if(!this.mergeItemStack(var5, extractor.getSizeInventory(), this.inventorySlots.size(), true)) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
@ -71,7 +71,7 @@ public class ContainerCraneExtractor extends Container {
|
||||
} else if(var3.getItem() == ModItems.upgrade_crystallizer) {
|
||||
if(!this.mergeItemStack(var5, 19, 20, false))
|
||||
return null;
|
||||
} else if(!this.mergeItemStack(var5, 9, inserter.getSizeInventory(), false)) {
|
||||
} else if(!this.mergeItemStack(var5, 9, extractor.getSizeInventory(), false)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ public class ContainerCraneExtractor extends Container {
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer player) {
|
||||
return inserter.isUseableByPlayer(player);
|
||||
return extractor.isUseableByPlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -116,15 +116,21 @@ public class ContainerCraneExtractor extends Container {
|
||||
|
||||
if(slot.getHasStack())
|
||||
ret = slot.getStack().copy();
|
||||
|
||||
slot.putStack(held != null ? held.copy() : null);
|
||||
|
||||
if(slot.getHasStack()) {
|
||||
slot.getStack().stackSize = 1;
|
||||
if(button == 1 && mode == 0 && slot.getHasStack()) {
|
||||
extractor.nextMode(index);
|
||||
return ret;
|
||||
|
||||
} else {
|
||||
slot.putStack(held != null ? held.copy() : null);
|
||||
|
||||
if(slot.getHasStack()) {
|
||||
slot.getStack().stackSize = 1;
|
||||
}
|
||||
|
||||
slot.onSlotChanged();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
slot.onSlotChanged();
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.inventory.container.ContainerCraneExtractor;
|
||||
@ -12,7 +14,9 @@ import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUICraneExtractor extends GuiInfoContainer {
|
||||
@ -27,6 +31,30 @@ public class GUICraneExtractor extends GuiInfoContainer {
|
||||
this.xSize = 176;
|
||||
this.ySize = 185;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int x, int y, float interp) {
|
||||
super.drawScreen(x, y, interp);
|
||||
|
||||
if(this.mc.thePlayer.inventory.getItemStack() == null) {
|
||||
for(int i = 0; i < 9; ++i) {
|
||||
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(i);
|
||||
|
||||
if(this.isMouseOverSlot(slot, x, y) && inserter.matcher.modes[i] != null) {
|
||||
|
||||
String label = EnumChatFormatting.YELLOW + "";
|
||||
|
||||
switch(inserter.matcher.modes[i]) {
|
||||
case "exact": label += "Item and meta match"; break;
|
||||
case "wildcard": label += "Item matches"; break;
|
||||
default: label += "Ore dict key matches: " + inserter.matcher.modes[i]; break;
|
||||
}
|
||||
|
||||
this.func_146283_a(Arrays.asList(new String[] { EnumChatFormatting.RED + "Right click to change", label }), x, y - 30);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int x, int y, int i) {
|
||||
@ -60,4 +88,8 @@ public class GUICraneExtractor extends GuiInfoContainer {
|
||||
drawTexturedModalRect(guiLeft + 139, guiTop + 47, 176, 0, 3, 6);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isMouseOverSlot(Slot slot, int x, int y) {
|
||||
return this.func_146978_c(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package com.hbm.items.machine;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.items.special.ItemNuclearWaste;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@ -14,7 +12,6 @@ import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class ItemDepletedFuel extends ItemNuclearWaste {
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.hbm.items.special;
|
||||
|
||||
import com.hbm.entity.item.EntitytemWaste;
|
||||
import com.hbm.entity.item.EntityItemWaste;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.Item;
|
||||
@ -22,12 +22,14 @@ public class ItemNuclearWaste extends Item {
|
||||
@Override
|
||||
public Entity createEntity(World world, Entity entityItem, ItemStack itemstack) {
|
||||
|
||||
EntitytemWaste entity = new EntitytemWaste(world, entityItem.posX, entityItem.posY, entityItem.posZ, itemstack);
|
||||
EntityItemWaste entity = new EntityItemWaste(world, entityItem.posX, entityItem.posY, entityItem.posZ, itemstack);
|
||||
entity.motionX = entityItem.motionX;
|
||||
entity.motionY = entityItem.motionY;
|
||||
entity.motionZ = entityItem.motionZ;
|
||||
entity.delayBeforeCanPickup = 10;
|
||||
|
||||
entityItem.setDead();
|
||||
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
147
src/main/java/com/hbm/module/ModulePatternMatcher.java
Normal file
147
src/main/java/com/hbm/module/ModulePatternMatcher.java
Normal file
@ -0,0 +1,147 @@
|
||||
package com.hbm.module;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.util.ItemStackUtil;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class ModulePatternMatcher {
|
||||
|
||||
public static final String MODE_EXACT = "exact";
|
||||
public static final String MODE_WILDCARD = "wildcard";
|
||||
public String[] modes;
|
||||
|
||||
public ModulePatternMatcher() {
|
||||
this.modes = new String[1];
|
||||
}
|
||||
|
||||
public ModulePatternMatcher(int count) {
|
||||
this.modes = new String[count];
|
||||
}
|
||||
|
||||
public void initPatternSmart(World world, ItemStack stack, int i) {
|
||||
|
||||
if(world.isRemote) return;
|
||||
|
||||
if(stack == null) {
|
||||
modes[i] = null;
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> names = ItemStackUtil.getOreDictNames(stack);
|
||||
|
||||
if(iterateAndCheck(names, i ,"ingot")) return;
|
||||
if(iterateAndCheck(names, i ,"block")) return;
|
||||
if(iterateAndCheck(names, i ,"dust")) return;
|
||||
if(iterateAndCheck(names, i ,"nugget")) return;
|
||||
if(iterateAndCheck(names, i ,"plate")) return;
|
||||
|
||||
if(stack.getHasSubtypes()) {
|
||||
modes[i] = MODE_EXACT;
|
||||
} else {
|
||||
modes[i] = MODE_WILDCARD;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean iterateAndCheck(List<String> names, int i, String prefix) {
|
||||
|
||||
for(String s : names) {
|
||||
if(s.startsWith(prefix)) {
|
||||
modes[i] = s;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void initPatternStandard(World world, ItemStack stack, int i) {
|
||||
|
||||
if(world.isRemote) return;
|
||||
|
||||
if(stack == null) {
|
||||
modes[i] = null;
|
||||
return;
|
||||
}
|
||||
|
||||
if(stack.getHasSubtypes()) {
|
||||
modes[i] = MODE_EXACT;
|
||||
} else {
|
||||
modes[i] = MODE_WILDCARD;
|
||||
}
|
||||
}
|
||||
|
||||
public void nextMode(World world, ItemStack pattern, int i) {
|
||||
|
||||
if(world.isRemote) return;
|
||||
|
||||
if(pattern == null) {
|
||||
modes[i] = null;
|
||||
return;
|
||||
}
|
||||
|
||||
if(modes[i] == null) {
|
||||
modes[i] = MODE_EXACT;
|
||||
} else if(MODE_EXACT.equals(modes[i])) {
|
||||
modes[i] = MODE_WILDCARD;
|
||||
} else if(MODE_WILDCARD.equals(modes[i])) {
|
||||
|
||||
List<String> names = ItemStackUtil.getOreDictNames(pattern);
|
||||
|
||||
if(names.isEmpty()) {
|
||||
modes[i] = MODE_EXACT;
|
||||
} else {
|
||||
modes[i] = names.get(0);
|
||||
}
|
||||
} else {
|
||||
|
||||
List<String> names = ItemStackUtil.getOreDictNames(pattern);
|
||||
|
||||
if(names.size() < 2 || modes[i].equals(names.get(names.size() - 1))) {
|
||||
modes[i] = MODE_EXACT;
|
||||
} else {
|
||||
|
||||
for(int j = 0; j < names.size() - 1; j++) {
|
||||
|
||||
if(modes[i].equals(names.get(j))) {
|
||||
modes[i] = names.get(j + 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isValidForFilter(ItemStack filter, int index, ItemStack input) {
|
||||
|
||||
String mode = modes[index];
|
||||
switch(mode) {
|
||||
case MODE_EXACT: return input.isItemEqual(filter) && ItemStack.areItemStackTagsEqual(input, filter);
|
||||
case MODE_WILDCARD: return input.getItem() == filter.getItem() && ItemStack.areItemStackTagsEqual(input, filter);
|
||||
default:
|
||||
List<String> keys = ItemStackUtil.getOreDictNames(input);
|
||||
return keys.contains(mode);
|
||||
}
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
|
||||
for(int i = 0; i < modes.length; i++) {
|
||||
if(nbt.hasKey("mode" + i)) {
|
||||
modes[i] = nbt.getString("mode" + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
|
||||
for(int i = 0; i < modes.length; i++) {
|
||||
if(modes[i] != null) {
|
||||
nbt.setString("mode" + i, modes[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ import com.hbm.entity.item.EntityMovingItem;
|
||||
import com.hbm.interfaces.IControlReceiver;
|
||||
import com.hbm.inventory.container.ContainerCraneExtractor;
|
||||
import com.hbm.inventory.gui.GUICraneExtractor;
|
||||
import com.hbm.module.ModulePatternMatcher;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
|
||||
@ -26,9 +27,11 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
public class TileEntityCraneExtractor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver {
|
||||
|
||||
public boolean isWhitelist = false;
|
||||
public ModulePatternMatcher matcher;
|
||||
|
||||
public TileEntityCraneExtractor() {
|
||||
super(20);
|
||||
this.matcher = new ModulePatternMatcher(9);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -89,12 +92,14 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setBoolean("isWhitelist", isWhitelist);
|
||||
this.matcher.writeToNBT(data);
|
||||
this.networkPack(data, 15);
|
||||
}
|
||||
}
|
||||
|
||||
public void networkUnpack(NBTTagCompound nbt) {
|
||||
this.isWhitelist = nbt.getBoolean("isWhitelist");
|
||||
this.matcher.readFromNBT(nbt);
|
||||
}
|
||||
|
||||
public boolean matchesFilter(ItemStack stack) {
|
||||
@ -102,13 +107,17 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I
|
||||
for(int i = 0; i < 9; i++) {
|
||||
ItemStack filter = slots[i];
|
||||
|
||||
if(filter != null && filter.isItemEqual(stack)) {
|
||||
if(this.matcher.isValidForFilter(filter, i, stack)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void nextMode(int i) {
|
||||
this.matcher.nextMode(worldObj, slots[i], i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||
@ -130,12 +139,14 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
this.isWhitelist = nbt.getBoolean("isWhitelist");
|
||||
this.matcher.readFromNBT(nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
nbt.setBoolean("isWhitelist", this.isWhitelist);
|
||||
this.matcher.writeToNBT(nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user