mirror of
https://github.com/GTNewHorizons/CodeChickenCore.git
synced 2026-10-27 06:43:52 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
850e2b9368 | ||
|
|
4713f7aebd | ||
|
|
b999279656 | ||
|
|
1879ba2071 |
No files matched your search
+1
-1
@@ -14,7 +14,7 @@ modId = CodeChickenCore
|
||||
modGroup = codechicken
|
||||
|
||||
# Whether to use modGroup as the maven publishing group.
|
||||
# Due to a history of using JitPack, the default is com.github.GTNewHorizons for all mods.
|
||||
# When false, com.github.GTNewHorizons is used.
|
||||
useModGroupForPublishing = false
|
||||
|
||||
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -86,8 +86,7 @@ done
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||
' "$PWD" ) || exit
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
@@ -206,7 +205,7 @@ fi
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// Add any additional repositiroes for your dependencies here
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
}
|
||||
+1
-1
@@ -17,7 +17,7 @@ pluginManagement {
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.30'
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.38'
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,12 @@ public class RedirectorTransformer implements IClassTransformer, Opcodes {
|
||||
"hasBrightness",
|
||||
"brightness",
|
||||
"side",
|
||||
"lc"
|
||||
"lc",
|
||||
"normalAttrib",
|
||||
"colourAttrib",
|
||||
"lightCoordAttrib",
|
||||
"sideAttrib",
|
||||
"lightingAttrib"
|
||||
|
||||
);
|
||||
Collections.addAll(redirectedSimpleMethods, "reset", "pullLightmap", "pushLightmap", "setDynamic", "draw");
|
||||
|
||||
@@ -81,8 +81,8 @@ public class LightModel implements CCRenderState.IVertexOperation {
|
||||
public boolean load(CCRenderState state) {
|
||||
if (!state.computeLighting) return false;
|
||||
|
||||
state.pipeline.addDependency(CCRenderState.normalAttrib);
|
||||
state.pipeline.addDependency(CCRenderState.colourAttrib);
|
||||
state.pipeline.addDependency(CCRenderState.normalAttrib());
|
||||
state.pipeline.addDependency(CCRenderState.colourAttrib());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ public class PlanarLightMatrix extends PlanarLightModel {
|
||||
|
||||
@Override
|
||||
public boolean load(CCRenderState state) {
|
||||
state.pipeline.addDependency(CCRenderState.sideAttrib);
|
||||
state.pipeline.addDependency(CCRenderState.sideAttrib());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ public class PlanarLightModel implements CCRenderState.IVertexOperation {
|
||||
public boolean load(CCRenderState state) {
|
||||
if (!state.computeLighting) return false;
|
||||
|
||||
state.pipeline.addDependency(CCRenderState.sideAttrib);
|
||||
state.pipeline.addDependency(CCRenderState.colourAttrib);
|
||||
state.pipeline.addDependency(CCRenderState.sideAttrib());
|
||||
state.pipeline.addDependency(CCRenderState.colourAttrib());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ public class SimpleBrightnessModel implements CCRenderState.IVertexOperation {
|
||||
|
||||
@Override
|
||||
public boolean load(CCRenderState state) {
|
||||
state.pipeline.addDependency(CCRenderState.sideAttrib);
|
||||
state.pipeline.addDependency(CCRenderState.sideAttrib());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@ public class BlockRenderer {
|
||||
|
||||
@Override
|
||||
public <T> T getAttributes(CCRenderState.VertexAttribute<T> attr) {
|
||||
return attr == CCRenderState.lightCoordAttrib && lcComputed ? (T) lightCoords : null;
|
||||
return attr == CCRenderState.lightCoordAttrib() && lcComputed ? (T) lightCoords : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAttribute(CCRenderState.VertexAttribute<?> attr) {
|
||||
return attr == CCRenderState.sideAttrib || attr == CCRenderState.lightCoordAttrib && lcComputed;
|
||||
return attr == CCRenderState.sideAttrib() || attr == CCRenderState.lightCoordAttrib() && lcComputed;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -136,12 +136,12 @@ public class BlockRenderer {
|
||||
|
||||
@Override
|
||||
public <T> T getAttributes(VertexAttribute<T> attr) {
|
||||
return attr == CCRenderState.lightCoordAttrib ? (T) lightCoords : null;
|
||||
return attr == CCRenderState.lightCoordAttrib() ? (T) lightCoords : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAttribute(VertexAttribute<?> attr) {
|
||||
return attr == CCRenderState.sideAttrib || attr == CCRenderState.lightCoordAttrib;
|
||||
return attr == CCRenderState.sideAttrib() || attr == CCRenderState.lightCoordAttrib();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -164,7 +164,7 @@ public class BlockRenderer {
|
||||
|
||||
/**
|
||||
* Renders faces of a block-like model based on a sideMask. Eg for side 2, verts 8-11 will be rendered
|
||||
*
|
||||
*
|
||||
* @param sideMask A mask of faces not to render
|
||||
*/
|
||||
// public static void renderFaces(int sideMask) {
|
||||
@@ -184,7 +184,7 @@ public class BlockRenderer {
|
||||
|
||||
/**
|
||||
* Renders faces of a cuboid with texture coordinates mapped to match a standard minecraft block
|
||||
*
|
||||
*
|
||||
* @param bounds The bounding cuboid to render
|
||||
* @param sideMask A mask of faces not to render
|
||||
*/
|
||||
|
||||
@@ -68,7 +68,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
}
|
||||
|
||||
public Vector3[] normals() {
|
||||
return getAttributes(CCRenderState.normalAttrib);
|
||||
return getAttributes(CCRenderState.normalAttrib());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -102,7 +102,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Each pixel corresponds to one unit of position when generating the model
|
||||
*
|
||||
*
|
||||
* @param i Vertex index to start generating at
|
||||
* @param x1 The minX bound of the box
|
||||
* @param y1 The minY bound of the box
|
||||
@@ -195,7 +195,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Generates a box, uv mapped to be the same as a minecraft block with the same bounds
|
||||
*
|
||||
*
|
||||
* @param i The vertex index to start generating at
|
||||
* @param bounds The bounds of the block, 0 to 1
|
||||
* @return The generated model. When rendering an icon will need to be supplied for the UV transformation.
|
||||
@@ -222,7 +222,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Generates a box, uv mapped to be the same as a minecraft block with the same bounds
|
||||
*
|
||||
*
|
||||
* @param i The vertex index to start generating at
|
||||
* @param x1 minX
|
||||
* @param y1 minY
|
||||
@@ -311,7 +311,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Computes the normals of all faces in the model. Uses the cross product of the vectors along 2 sides of the face
|
||||
*
|
||||
*
|
||||
* @param start The first vertex to generate normals for
|
||||
* @param length The number of vertices to generate normals for. Note this must be a multiple of 3 for triangles or
|
||||
* 4 for quads
|
||||
@@ -321,7 +321,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
if (length % vp != 0 || start % vp != 0)
|
||||
throw new IllegalArgumentException("Cannot generate normals across polygons");
|
||||
|
||||
Vector3[] normals = getOrAllocate(CCRenderState.normalAttrib);
|
||||
Vector3[] normals = getOrAllocate(CCRenderState.normalAttrib());
|
||||
for (int k = 0; k < length; k += vp) {
|
||||
int i = k + start;
|
||||
Vector3 diff1 = verts[i + 1].vec.copy().subtract(verts[i].vec);
|
||||
@@ -336,14 +336,14 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
/**
|
||||
* Computes lighting using the normals add a light model If the model is rotated, the lighting will no longer be
|
||||
* valid
|
||||
*
|
||||
*
|
||||
* @return The model
|
||||
*/
|
||||
public CCModel computeLighting(LightModel light) {
|
||||
Vector3[] normals = normals();
|
||||
int[] colours = getAttributes(CCRenderState.lightingAttrib);
|
||||
int[] colours = getAttributes(CCRenderState.lightingAttrib());
|
||||
if (colours == null) {
|
||||
colours = getOrAllocate(CCRenderState.lightingAttrib);
|
||||
colours = getOrAllocate(CCRenderState.lightingAttrib());
|
||||
Arrays.fill(colours, -1);
|
||||
}
|
||||
for (int k = 0; k < verts.length; k++) colours[k] = light.apply(colours[k], normals[k]);
|
||||
@@ -351,18 +351,18 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
}
|
||||
|
||||
public CCModel setColour(int c) {
|
||||
int[] colours = getOrAllocate(CCRenderState.colourAttrib);
|
||||
int[] colours = getOrAllocate(CCRenderState.colourAttrib());
|
||||
Arrays.fill(colours, c);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the minecraft lighting coordinates for use with a LightMatrix
|
||||
*
|
||||
*
|
||||
* @return The model
|
||||
*/
|
||||
public CCModel computeLightCoords() {
|
||||
LC[] lcs = getOrAllocate(CCRenderState.lightCoordAttrib);
|
||||
LC[] lcs = getOrAllocate(CCRenderState.lightCoordAttrib());
|
||||
Vector3[] normals = normals();
|
||||
for (int i = 0; i < verts.length; i++) lcs[i] = new LC().compute(verts[i].vec, normals[i]);
|
||||
return this;
|
||||
@@ -370,7 +370,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Averages all normals at the same position to produce a smooth lighting effect.
|
||||
*
|
||||
*
|
||||
* @return The model
|
||||
*/
|
||||
public CCModel smoothNormals() {
|
||||
@@ -461,7 +461,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Renders vertices start through start+length-1 of the model
|
||||
*
|
||||
*
|
||||
* @param start The first vertex index to render
|
||||
* @param end The vertex index to render until
|
||||
* @param ops Operations to apply
|
||||
@@ -520,7 +520,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Parses vertices, texture coords, normals and polygons from a WaveFront Obj file
|
||||
*
|
||||
*
|
||||
* @param input An input stream to a obj file
|
||||
* @param vertexMode The vertex mode to create the model for (GL_TRIANGLES or GL_QUADS)
|
||||
* @param coordSystem The cooridnate system transformation to apply
|
||||
@@ -624,7 +624,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Parses vertices, texture coords, normals and polygons from a WaveFront Obj file
|
||||
*
|
||||
*
|
||||
* @param res The resource for the obj file
|
||||
* @return A map of group names to models
|
||||
*/
|
||||
@@ -634,7 +634,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Parses vertices, texture coords, normals and polygons from a WaveFront Obj file
|
||||
*
|
||||
*
|
||||
* @param res The resource for the obj file
|
||||
* @param coordSystem The cooridnate system transformation to apply
|
||||
* @return A map of group names to models
|
||||
@@ -652,7 +652,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Parses vertices, texture coords, normals and polygons from a WaveFront Obj file
|
||||
*
|
||||
*
|
||||
* @param res The resource for the obj file
|
||||
* @param vertexMode The vertex mode to create the model for (GL_TRIANGLES or GL_QUADS)
|
||||
* @param coordSystem The cooridnate system transformation to apply
|
||||
@@ -678,7 +678,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
boolean hasNormals = polys.get(0)[2] > 0;
|
||||
CCModel model = CCModel.newModel(vertexMode, polys.size());
|
||||
if (hasNormals) model.getOrAllocate(CCRenderState.normalAttrib);
|
||||
if (hasNormals) model.getOrAllocate(CCRenderState.normalAttrib());
|
||||
|
||||
for (int i = 0; i < polys.size(); i++) {
|
||||
int[] ai = polys.get(i);
|
||||
@@ -807,7 +807,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Generate models rotated to the other 5 sides of the block
|
||||
*
|
||||
*
|
||||
* @param models An array of 6 models
|
||||
* @param side The side of this model
|
||||
* @param point The rotation point
|
||||
@@ -822,7 +822,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Generate models rotated to the other 3 horizontal of the block
|
||||
*
|
||||
*
|
||||
* @param models An array of 4 models
|
||||
* @param side The side of this model
|
||||
* @param point The rotation point
|
||||
@@ -841,7 +841,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel> {
|
||||
|
||||
/**
|
||||
* Generates copies of faces with clockwise vertices
|
||||
*
|
||||
*
|
||||
* @return The model
|
||||
*/
|
||||
public static CCModel generateBackface(CCModel src, int srcpos, CCModel dst, int destpos, int length) {
|
||||
|
||||
@@ -169,7 +169,27 @@ public class CCRenderState {
|
||||
}
|
||||
}
|
||||
|
||||
public static VertexAttribute<Vector3[]> normalAttrib = new VertexAttribute<>() {
|
||||
public static VertexAttribute<Vector3[]> normalAttrib() {
|
||||
return instances.get().normalAttrib;
|
||||
}
|
||||
|
||||
public static VertexAttribute<int[]> colourAttrib() {
|
||||
return instances.get().colourAttrib;
|
||||
}
|
||||
|
||||
public static VertexAttribute<LC[]> lightCoordAttrib() {
|
||||
return instances.get().lightCoordAttrib;
|
||||
}
|
||||
|
||||
public static VertexAttribute<int[]> sideAttrib() {
|
||||
return instances.get().sideAttrib;
|
||||
}
|
||||
|
||||
public static VertexAttribute<int[]> lightingAttrib() {
|
||||
return instances.get().lightingAttrib;
|
||||
}
|
||||
|
||||
public VertexAttribute<Vector3[]> normalAttrib = new VertexAttribute<>() {
|
||||
|
||||
private Vector3[] normalRef;
|
||||
|
||||
@@ -197,7 +217,7 @@ public class CCRenderState {
|
||||
else state.setNormalInstance(Rotation.axes[state.side]);
|
||||
}
|
||||
};
|
||||
public static VertexAttribute<int[]> colourAttrib = new VertexAttribute<>() {
|
||||
public VertexAttribute<int[]> colourAttrib = new VertexAttribute<>() {
|
||||
|
||||
private int[] colourRef;
|
||||
|
||||
@@ -219,7 +239,7 @@ public class CCRenderState {
|
||||
else state.setColourInstance(state.baseColour);
|
||||
}
|
||||
};
|
||||
public static VertexAttribute<int[]> lightingAttrib = new VertexAttribute<>() {
|
||||
public VertexAttribute<int[]> lightingAttrib = new VertexAttribute<>() {
|
||||
|
||||
private int[] colourRef;
|
||||
|
||||
@@ -245,7 +265,7 @@ public class CCRenderState {
|
||||
state.setColourInstance(ColourRGBA.multiply(state.colour, colourRef[state.vertexIndex]));
|
||||
}
|
||||
};
|
||||
public static VertexAttribute<int[]> sideAttrib = new VertexAttribute<>() {
|
||||
public VertexAttribute<int[]> sideAttrib = new VertexAttribute<>() {
|
||||
|
||||
private int[] sideRef;
|
||||
|
||||
@@ -272,7 +292,7 @@ public class CCRenderState {
|
||||
/**
|
||||
* Uses the position of the lightmatrix to compute LC if not provided
|
||||
*/
|
||||
public static VertexAttribute<LC[]> lightCoordAttrib = new VertexAttribute<>() {
|
||||
public VertexAttribute<LC[]> lightCoordAttrib = new VertexAttribute<>() {
|
||||
|
||||
private LC[] lcRef;
|
||||
private final Vector3 vec = new Vector3(); // for computation
|
||||
|
||||
@@ -14,14 +14,14 @@ public abstract class Transformation extends ITransformation<Vector3, Transforma
|
||||
|
||||
/**
|
||||
* Applies this transformation to a normal (doesn't translate)
|
||||
*
|
||||
*
|
||||
* @param normal The normal to transform
|
||||
*/
|
||||
public abstract void applyN(Vector3 normal);
|
||||
|
||||
/**
|
||||
* Applies this transformation to a matrix as a multiplication on the right hand side.
|
||||
*
|
||||
*
|
||||
* @param mat The matrix to combine this transformation with
|
||||
*/
|
||||
public abstract void apply(Matrix4 mat);
|
||||
@@ -39,14 +39,14 @@ public abstract class Transformation extends ITransformation<Vector3, Transforma
|
||||
|
||||
@Override
|
||||
public boolean load(CCRenderState state) {
|
||||
state.pipeline.addRequirement(CCRenderState.normalAttrib.operationID());
|
||||
state.pipeline.addRequirement(CCRenderState.normalAttrib().operationID());
|
||||
return !isRedundant();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void operate(CCRenderState state) {
|
||||
apply(state.vert.vec);
|
||||
if (CCRenderState.normalAttrib.active) applyN(state.normal);
|
||||
if (CCRenderState.normalAttrib().active) applyN(state.normal);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -79,17 +79,25 @@ public class WorldExtensionManager {
|
||||
|
||||
@SubscribeEvent
|
||||
public void onChunkWatch(Watch event) {
|
||||
Chunk chunk = event.player.worldObj.getChunkFromChunkCoords(event.chunk.chunkXPos, event.chunk.chunkZPos);
|
||||
for (WorldExtension extension : worldMap.get(event.player.worldObj))
|
||||
extension.watchChunk(chunk, event.player);
|
||||
WorldExtension[] extensions = worldMap.get(event.player.worldObj);
|
||||
|
||||
if (extensions != null) {
|
||||
Chunk chunk = event.player.worldObj
|
||||
.getChunkFromChunkCoords(event.chunk.chunkXPos, event.chunk.chunkZPos);
|
||||
for (WorldExtension extension : extensions) extension.watchChunk(chunk, event.player);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void onChunkUnWatch(UnWatch event) {
|
||||
Chunk chunk = event.player.worldObj.getChunkFromChunkCoords(event.chunk.chunkXPos, event.chunk.chunkZPos);
|
||||
for (WorldExtension extension : worldMap.get(event.player.worldObj))
|
||||
extension.unwatchChunk(chunk, event.player);
|
||||
WorldExtension[] extensions = worldMap.get(event.player.worldObj);
|
||||
|
||||
if (extensions != null) {
|
||||
Chunk chunk = event.player.worldObj
|
||||
.getChunkFromChunkCoords(event.chunk.chunkXPos, event.chunk.chunkZPos);
|
||||
for (WorldExtension extension : extensions) extension.unwatchChunk(chunk, event.player);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -110,7 +118,7 @@ public class WorldExtensionManager {
|
||||
}
|
||||
|
||||
private static boolean initialised;
|
||||
private static ArrayList<WorldExtensionInstantiator> extensionIntialisers = new ArrayList<WorldExtensionInstantiator>();
|
||||
private static ArrayList<WorldExtensionInstantiator> extensionIntialisers = new ArrayList<>();
|
||||
|
||||
public static void registerWorldExtension(WorldExtensionInstantiator init) {
|
||||
if (!initialised) init();
|
||||
@@ -125,7 +133,7 @@ public class WorldExtensionManager {
|
||||
FMLCommonHandler.instance().bus().register(new WorldExtensionEventHandler());
|
||||
}
|
||||
|
||||
private static HashMap<World, WorldExtension[]> worldMap = new HashMap<World, WorldExtension[]>();
|
||||
private static HashMap<World, WorldExtension[]> worldMap = new HashMap<>();
|
||||
|
||||
private static void onWorldLoad(World world) {
|
||||
WorldExtension[] extensions = new WorldExtension[extensionIntialisers.size()];
|
||||
|
||||
@@ -4,13 +4,15 @@ import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.PrintStream;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.objectweb.asm.ClassVisitor;
|
||||
import org.objectweb.asm.commons.RemappingClassAdapter;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
@@ -181,7 +183,40 @@ public class ObfuscationRun implements ILogStreams {
|
||||
|
||||
public void remap(ClassNode cnode, ClassVisitor cv) {
|
||||
cstMappper.transform(cnode);
|
||||
cnode.accept(new RemappingClassAdapter(cv, obfMapper));
|
||||
cnode.accept(newRemapper(cv, obfMapper));
|
||||
}
|
||||
|
||||
private static ClassVisitor newRemapper(ClassVisitor visitor, Remapper remapper) {
|
||||
try {
|
||||
return theConstructor.newInstance(visitor, remapper);
|
||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static final Constructor<? extends ClassVisitor> theConstructor;
|
||||
|
||||
static {
|
||||
Class<? extends ClassVisitor> remapperClass;
|
||||
try {
|
||||
// noinspection unchecked
|
||||
remapperClass = (Class<? extends ClassVisitor>) Class.forName("org.objectweb.asm.commons.ClassRemapper");
|
||||
} catch (ClassNotFoundException e) {
|
||||
try {
|
||||
// noinspection unchecked
|
||||
remapperClass = (Class<? extends ClassVisitor>) Class
|
||||
.forName("org.objectweb.asm.commons.RemappingClassAdapter");
|
||||
} catch (ClassNotFoundException ex) {
|
||||
RuntimeException err = new RuntimeException(ex);
|
||||
err.addSuppressed(e);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
try {
|
||||
theConstructor = remapperClass.getConstructor(ClassVisitor.class, Remapper.class);
|
||||
} catch (NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<String> getParents(ClassNode cnode) {
|
||||
|
||||
Reference in new issue
Block a user