Files
TinkersConstruct/src/main/java/tconstruct/weaponry/WeaponryClientProxy.java
T
Raven Szewczyk 39be06c23b Fix JABBA-related issues with crafting station slots (#54)
* Fix shift-merging tools voiding items

fixes <https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/11392>

* Change 0-sized ItemStacks into null stacks in crafting station attached slots

Fixes <https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/10425>

* Update buildscript

* spotlessApply
2022-09-22 20:51:23 +02:00

208 lines
9.5 KiB
Java

package tconstruct.weaponry;
import static tconstruct.weaponry.TinkerWeaponry.*;
import cpw.mods.fml.client.registry.RenderingRegistry;
import mantle.lib.client.MantleClientRegistry;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.MinecraftForge;
import tconstruct.client.AmmoItemRenderer;
import tconstruct.library.client.TConstructClientRegistry;
import tconstruct.library.crafting.ToolBuilder;
import tconstruct.library.entity.ProjectileBase;
import tconstruct.library.tools.ToolCore;
import tconstruct.tools.TinkerTools;
import tconstruct.util.Reference;
import tconstruct.weaponry.client.AmmoSlotHandler;
import tconstruct.weaponry.client.CrosshairHandler;
import tconstruct.weaponry.client.RenderEventHandler;
import tconstruct.weaponry.client.entity.ArrowEntityRenderer;
import tconstruct.weaponry.client.entity.JavelinEntityRenderer;
import tconstruct.weaponry.client.entity.ProjectileBaseRenderer;
import tconstruct.weaponry.client.entity.ShurikenEntityRenderer;
import tconstruct.weaponry.client.item.*;
import tconstruct.weaponry.entity.*;
public class WeaponryClientProxy extends WeaponryCommonProxy {
public static AmmoItemRenderer renderer;
@Override
public void init() {
super.init();
MinecraftForge.EVENT_BUS.register(new CrosshairHandler());
MinecraftForge.EVENT_BUS.register(new AmmoSlotHandler());
MinecraftForge.EVENT_BUS.register(new RenderEventHandler());
registerRenderers();
registerEntityRendering();
registerMaterialRendering();
buttons();
registerManualIcons();
}
private void registerRenderers() {
renderer = new AmmoItemRenderer();
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.shuriken, renderer);
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.throwingknife, new ThrowingKnifeRenderer());
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.javelin, new JavelinRenderer());
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.shortbow, new BowRenderer());
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.longbow, new BowRenderer());
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.crossbow, new CrossbowRenderer());
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.arrowAmmo, renderer);
MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.boltAmmo, renderer);
// MinecraftForgeClient.registerItemRenderer(TinkerWeaponry.boneana, );
}
private void registerEntityRendering() {
ProjectileBaseRenderer defaultRenderer = new ProjectileBaseRenderer<ProjectileBase>();
RenderingRegistry.registerEntityRenderingHandler(ShurikenEntity.class, new ShurikenEntityRenderer());
RenderingRegistry.registerEntityRenderingHandler(ThrowingKnifeEntity.class, defaultRenderer);
RenderingRegistry.registerEntityRenderingHandler(JavelinEntity.class, new JavelinEntityRenderer());
RenderingRegistry.registerEntityRenderingHandler(ArrowEntity.class, new ArrowEntityRenderer());
RenderingRegistry.registerEntityRenderingHandler(BoltEntity.class, new ArrowEntityRenderer(0.8f));
}
private void registerMaterialRendering() {
ToolCore arrow = TinkerWeaponry.arrowAmmo;
String pre = Reference.resource(arrow.getDefaultFolder()) + "/";
String[] shaft = {"wood", "bone", "reed", "blaze", null};
String[] fletching = {"feather", "leaf", "slime", "blueslime", "slimeleaf"};
// we register different textures for the different parts per index
for (int i = 0; i < 5; i++) {
String handletex = pre + shaft[i] + arrow.getIconSuffix(2);
String acctex = pre + fletching[i] + arrow.getIconSuffix(3);
arrow.registerAlternatePartPaths(i, new String[] {null, null, handletex, acctex});
TinkerWeaponry.boltAmmo.registerAlternatePartPaths(i, new String[] {null, null, null, acctex});
}
// for bolts too
pre = Reference.resource(TinkerWeaponry.boltAmmo.getDefaultFolder()) + "/";
for (int i = 0; i < 5; i++) {
String acctex = pre + fletching[i] + TinkerWeaponry.boltAmmo.getIconSuffix(3);
TinkerWeaponry.boltAmmo.registerAlternatePartPaths(i, new String[] {null, null, null, acctex});
}
// bowstring
String[] bowstringTypes = {"string", "magicfabric", "flamestring"};
for (int bowIter = 0; bowIter < bowstringTypes.length; bowIter++) {
TConstructClientRegistry.addAlternateMaterialRenderMapping(
TinkerWeaponry.shortbow, bowIter, Reference.RESOURCE, bowstringTypes[bowIter], true);
}
}
private void buttons() {
final String tex = "textures/gui/icons.png";
// Stencil Table
TConstructClientRegistry.addStencilButton2(11, 3, 21, Reference.RESOURCE, tex); // arrow head
TConstructClientRegistry.addStencilButton2(12, 3, 22, Reference.RESOURCE, tex); // fletchling
TConstructClientRegistry.addStencilButton2(0, 0, -1, null, null);
TConstructClientRegistry.addStencilButton2(0, 0, -1, null, null);
TConstructClientRegistry.addStencilButton2(3, 4, 27, Reference.RESOURCE, tex); // bow limb
TConstructClientRegistry.addStencilButton2(10, 3, 23, Reference.RESOURCE, tex); // bowstring
TConstructClientRegistry.addStencilButton2(1, 4, 25, Reference.RESOURCE, tex); // crossbow limb
TConstructClientRegistry.addStencilButton2(2, 4, 26, Reference.RESOURCE, tex); // crossbow body
TConstructClientRegistry.addStencilButton2(0, 4, 24, Reference.RESOURCE, tex); // shuriken
// TConstructClientRegistry.addStencilButton2(4, 4, index, Reference.RESOURCE, "textures/gui/icons.png"); //
// bolt
// Tool Station
ToolCore[] tools = {shortbow, arrowAmmo, throwingknife, javelin};
int[][] icons = {
new int[] {3, 9, 1}, // shortbow
new int[] {7, 10, 1}, // arrow
new int[] {2, 1, 5}, // throwingknife
new int[] {1, 2, 5} // javelin
};
int[][] coords = {
new int[] {3, 10, 3, 13}, new int[] {4, 3, 4, 13}, // shortbow
new int[] {11, 0, 12, 13}, new int[] {3, 3, 3, 13}, // arrow
new int[] {7, 0, 13, 13}, new int[] {2, 3, 13, 13}, // throwingknife
new int[] {11, 8, 8, 13}, new int[] {3, 3, 3, 13} // javelin
};
for (int i = 0; i < tools.length; i++) {
String locString = String.format(
"gui.toolstation.%s.desc", tools[i].getToolName().toLowerCase());
TConstructClientRegistry.addToolButton(
icons[i][0],
icons[i][1],
icons[i][2],
coords[i * 2],
coords[i * 2 + 1],
tools[i].getLocalizedToolName(),
locString,
Reference.RESOURCE,
tex);
}
// Tool Forge
tools = new ToolCore[] {longbow, crossbow, boltAmmo, shuriken};
icons = new int[][] {
new int[] {8, 11, 1}, // longbow
new int[] {9, 12, 1}, // crossbow
new int[] {2, 13, 1}, // bolt
new int[] {4, 0, 5} // shuriken
};
coords = new int[][] {
new int[] {3, 10, 3, 9}, new int[] {4, 3, 4, 2}, // longbow
new int[] {1, 2, 10, 9}, new int[] {4, 4, 3, 3}, // crossbow
new int[] {4, 12, 13, 13}, new int[] {4, 3, 13, 13}, // bolt
new int[] {0, 0, 0, 0}, new int[] {4, 4, 4, 4} // shuriken
};
for (int i = 0; i < tools.length; i++) {
String locString = String.format(
"gui.toolstation.%s.desc", tools[i].getToolName().toLowerCase());
TConstructClientRegistry.addTierTwoButton(
icons[i][0],
icons[i][1],
icons[i][2],
coords[i * 2],
coords[i * 2 + 1],
tools[i].getLocalizedToolName(),
locString,
Reference.RESOURCE,
tex);
}
}
/* Manual Stuff */
public void registerManualIcons() {
MantleClientRegistry.registerManualIcon(
"throwingknifeIcon",
ToolBuilder.instance.buildTool(
new ItemStack(TinkerTools.knifeBlade, 1, TinkerTools.MaterialID.Iron),
new ItemStack(TinkerTools.toolRod, 1, 11),
null,
""));
MantleClientRegistry.registerManualIcon(
"shortbowIcon",
ToolBuilder.instance.buildTool(
new ItemStack(TinkerWeaponry.partBowLimb, 1, TinkerTools.MaterialID.Wood),
new ItemStack(TinkerWeaponry.bowstring, 1, 0),
new ItemStack(TinkerWeaponry.partBowLimb, 1, TinkerTools.MaterialID.Wood),
""));
MantleClientRegistry.registerManualIcon(
"arrowIcon",
ToolBuilder.instance.buildTool(
new ItemStack(TinkerWeaponry.arrowhead, 1, TinkerTools.MaterialID.Flint),
new ItemStack(Items.stick),
new ItemStack(TinkerWeaponry.fletching, 1, 0),
""));
MantleClientRegistry.registerManualIcon("weaponrybook", new ItemStack(TinkerTools.manualBook, 1, 4));
}
}