stack matching settings for extractor crane

This commit is contained in:
Boblet 2022-06-07 16:05:31 +02:00
parent 02761a12cf
commit 8a080a037f
7 changed files with 219 additions and 24 deletions

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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 {

View File

@ -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;
}
}

View 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]);
}
}
}
}

View File

@ -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