Skip to content

Commit 64dc3be

Browse files
committed
A lot of things
Redid most of the mod, to make compatibility even more likely. Hitbox swapping works. Basically I figured out why the arms weren't swapping before; the boxes used display lists. So I swap the display list it uses depending on the render job. However Smart Moving once again found a way to explode. Wide arm models actually 100% work but slim arm ones do not... The right arm is messed up, albeit the hat layer actually gets "slimmed" properly... What will it take, Smart Moving?! So close, yet so far. Renamed some interfaces to more accurately describe what they do, and done some preparations to make the ModelBiped mixin apply to all biped entities for better scope and detection. Twilight Forest giants now work. For now they get assigned a default skin; this won't remain the default behavior for long, but it will be a config option. Lots of new Utils, including splitting off the settings for several transformations into an enum. Hey, seems unnecessary but I got tired of messing with so many branching utility funcs whenever I needed to pass in a new setting, okay?! The new utils allowed the mixin rewrite to be a lot cleaner. Default skin state is set on player instantiation instead of every frame. Slim Steve no longer has hat layer on arms and also has corrected UV mappings from before. Signed-off-by: roadhog360 <[email protected]>
1 parent 10a6e71 commit 64dc3be

26 files changed

+497
-272
lines changed

README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ Current Features:
1616
- Fix overlap in hat layer when wearing a head
1717
- Hat layers on head blocks
1818
- New default skins alongside just Steve
19+
- Patch for Twilight Forest giants
1920

2021
Todo:
2122
- Config
2223
- Toggle head block inventory icon render
2324
- Toggle new default skins (Either Steve/Alex or JUST Steve)
2425

2526
Current incompatibility todo:
26-
- Twilight Forest giants
27-
- Smart Moving
27+
- Twilight Forest heads
28+
- Smart Moving (it's like 90% working slim models are just slightly wrong)
2829
- Botania Gaia Guardian

dependencies.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@
3535
*/
3636
dependencies {
3737
runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.5.4-GTNH:dev")
38+
compileOnly('com.github.GTNewHorizons:twilightforest:2.6.33:dev')
3839
compileOnly deobfCurse("headcrumbs-222838:2279949")
3940
}

src/main/java/roadhog360/simpleskinbackport/ClientProxy.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import cpw.mods.fml.common.FMLCommonHandler;
44
import cpw.mods.fml.common.event.FMLInitializationEvent;
55
import net.minecraftforge.common.MinecraftForge;
6-
import roadhog360.simpleskinbackport.core.ClientEventHandler;
6+
import roadhog360.simpleskinbackport.client.ClientEventHandler;
77

88
public class ClientProxy extends CommonProxy {
99

src/main/java/roadhog360/simpleskinbackport/core/ClientEventHandler.java renamed to src/main/java/roadhog360/simpleskinbackport/client/ClientEventHandler.java

+22-8
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
package roadhog360.simpleskinbackport.core;
1+
package roadhog360.simpleskinbackport.client;
22

33
import cpw.mods.fml.client.FMLClientHandler;
44
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
5+
import net.minecraft.client.model.ModelBiped;
56
import net.minecraft.client.renderer.entity.Render;
7+
import net.minecraft.client.renderer.entity.RenderBiped;
68
import net.minecraft.client.renderer.entity.RenderManager;
79
import net.minecraft.client.renderer.entity.RenderPlayer;
810
import net.minecraft.entity.Entity;
9-
import net.minecraft.entity.player.EntityPlayer;
11+
import net.minecraft.entity.EntityLiving;
1012
import net.minecraft.item.Item;
1113
import net.minecraft.item.ItemSkull;
1214
import net.minecraft.item.ItemStack;
1315
import net.minecraftforge.client.event.RenderHandEvent;
1416
import net.minecraftforge.client.event.RenderLivingEvent;
15-
import roadhog360.simpleskinbackport.ducks.INewModelData;
16-
import roadhog360.simpleskinbackport.ducks.ISwitchableArmsModel;
17+
import roadhog360.simpleskinbackport.ducks.IArmsState;
18+
import roadhog360.simpleskinbackport.ducks.INewBipedModel;
1719

1820
public class ClientEventHandler {
1921
public static final ClientEventHandler INSTANCE = new ClientEventHandler();
@@ -25,15 +27,27 @@ public void onHandRender(RenderHandEvent event) {
2527
@SubscribeEvent
2628
public void onRenderEntity(RenderLivingEvent.Pre event) {
2729
checkAndSetArmsState(event.entity, event.renderer);
28-
if(event.renderer instanceof RenderPlayer renderPlayer && event.entity instanceof EntityPlayer living) {
30+
if(event.entity instanceof EntityLiving living) {
2931
ItemStack itemstack = living.getEquipmentInSlot(4);
30-
renderPlayer.modelBipedMain.bipedHeadwear.showModel = itemstack == null || !isHead(itemstack.getItem());
32+
boolean showHeadwear = itemstack == null || !isHead(itemstack.getItem());
33+
if(event.renderer instanceof RenderPlayer renderPlayer) {
34+
renderPlayer.modelBipedMain.bipedHeadwear.showModel = showHeadwear;
35+
} else if (event.renderer instanceof RenderBiped renderBiped) {
36+
renderBiped.modelBipedMain.bipedHeadwear.showModel = showHeadwear;
37+
}
3138
}
3239
}
3340

3441
private void checkAndSetArmsState(Entity entity, Render render) {
35-
if(render instanceof RenderPlayer renderPlayer && renderPlayer.modelBipedMain instanceof ISwitchableArmsModel model
36-
&& entity instanceof INewModelData player) {
42+
ModelBiped modelBiped;
43+
if(render instanceof RenderPlayer renderPlayer) {
44+
modelBiped = renderPlayer.modelBipedMain;
45+
} else if (render instanceof RenderBiped renderBiped) {
46+
modelBiped = renderBiped.modelBipedMain;
47+
} else {
48+
return;
49+
}
50+
if(modelBiped instanceof INewBipedModel model && entity instanceof IArmsState player) {
3751
model.simpleSkinBackport$setSlim(player.simpleSkinBackport$isSlim());
3852
}
3953
}

src/main/java/roadhog360/simpleskinbackport/client/ImageBufferDownloadPlayerSkin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import net.minecraft.client.renderer.ImageBufferDownload;
55
import net.minecraft.client.resources.SkinManager;
66
import roadhog360.simpleskinbackport.core.Utils;
7-
import roadhog360.simpleskinbackport.ducks.INewModelData;
7+
import roadhog360.simpleskinbackport.ducks.IArmsState;
88

99
import java.awt.*;
1010
import java.awt.image.BufferedImage;
@@ -64,7 +64,7 @@ public BufferedImage parseUserSkin(BufferedImage buffImg) {
6464
@Override
6565
public void func_152634_a() {
6666
super.func_152634_a();
67-
if(callback instanceof INewModelData data) {
67+
if(callback instanceof IArmsState data) {
6868
Utils.setSlimFromMetadata(texture, data);
6969
}
7070
}

src/main/java/roadhog360/simpleskinbackport/client/models/ModelHatLayer.java

-28
This file was deleted.

src/main/java/roadhog360/simpleskinbackport/client/models/ModelSlimArm.java

-89
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package roadhog360.simpleskinbackport.core;
2+
3+
import com.google.common.collect.Lists;
4+
import net.minecraft.client.model.ModelBox;
5+
import net.minecraft.client.model.ModelRenderer;
6+
import org.apache.commons.lang3.tuple.Pair;
7+
8+
import java.util.List;
9+
10+
public class ArmPair extends Pair<List<ModelBox>, List<ModelBox>> {
11+
12+
private final List<ModelBox> left;
13+
private final Integer leftDisplayList;
14+
private final List<ModelBox> right;
15+
private final Integer rightDisplayList;
16+
17+
private ArmPair(List<ModelBox> left, Integer leftDisplayList, List<ModelBox> right, Integer rightDisplayList) {
18+
this.left = left;
19+
this.leftDisplayList = leftDisplayList;
20+
this.right = right;
21+
this.rightDisplayList = rightDisplayList;
22+
}
23+
24+
public static ArmPair of(ModelRenderer left, ModelRenderer right) {
25+
return new ArmPair(Lists.newArrayList(left.cubeList), Utils.createDisplaylistFor(left),
26+
Lists.newArrayList(right.cubeList), Utils.createDisplaylistFor(right));
27+
}
28+
29+
@Override
30+
public List<ModelBox> getLeft() {
31+
return left;
32+
}
33+
34+
public Integer getLeftDisplayList() {
35+
return leftDisplayList;
36+
}
37+
38+
@Override
39+
public List<ModelBox> getRight() {
40+
return right;
41+
}
42+
43+
public Integer getRightDisplayList() {
44+
return rightDisplayList;
45+
}
46+
47+
@Override
48+
public List<ModelBox> setValue(List<ModelBox> value) {
49+
throw new UnsupportedOperationException();
50+
}
51+
}

0 commit comments

Comments
 (0)