Skip to content

Commit fb440b0

Browse files
committed
Update to 1.15
Most of the port is pretty simple. The main problems are regarding changes to Minecraft's rendering system. - Remove several rendering tweaks until Forge's compatibility it brought up-to-date - Map rendering for pocket computers and printouts - Item frame rendering for printouts - Custom block outlines for monitors and cables/wired modems - Custom breaking progress for cables/wired modems - Turtle "Dinnerbone" rendering is currently broken, as normals are not correctly transformed. - Rewrite FixedWidthFontRenderer to to the buffer in a single sweep. In order to do this, the term_font now also bundles a "background" section, which is just a blank region of the screen. - Render monitors using a VBO instead of a call list. I haven't compared performance yet, but it manages to render a 6x5 array of _static_ monitors at almost 60fps, which seems pretty reasonable.
1 parent bf6d017 commit fb440b0

File tree

65 files changed

+1054
-1520
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1054
-1520
lines changed

build.gradle

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ buildscript {
99
}
1010
dependencies {
1111
classpath 'com.google.code.gson:gson:2.8.1'
12-
classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.154'
12+
classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.159'
1313
classpath 'net.sf.proguard:proguard-gradle:6.1.0beta2'
1414
classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
1515
}
@@ -73,14 +73,6 @@ repositories {
7373
name "SquidDev"
7474
url "https://squiddev.cc/maven"
7575
}
76-
ivy {
77-
name "Charset"
78-
artifactPattern "https://asie.pl/files/mods/Charset/LibOnly/[module]-[revision](-[classifier]).[ext]"
79-
}
80-
maven {
81-
name "Amadornes"
82-
url "https://maven.amadornes.com/"
83-
}
8476
maven {
8577
name "CraftTweaker"
8678
url "https://maven.blamejared.com/"
@@ -98,10 +90,8 @@ dependencies {
9890

9991
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
10092

101-
compileOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.25:api")
102-
compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.14.4:5.0.1.150")
103-
104-
runtimeOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.25")
93+
compileOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.2:api")
94+
runtimeOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.2")
10595

10696
shade 'org.squiddev:Cobalt:0.5.0-SNAPSHOT'
10797

@@ -111,6 +101,15 @@ dependencies {
111101
deployerJars "org.apache.maven.wagon:wagon-ssh:3.0.0"
112102
}
113103

104+
sourceSets {
105+
main {
106+
java {
107+
exclude 'dan200/computercraft/client/render_old'
108+
exclude 'dan200/computercraft/shared/integration/crafttweaker'
109+
}
110+
}
111+
}
112+
114113
// Compile tasks
115114

116115
javadoc {
@@ -372,7 +371,7 @@ curseforge {
372371
apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
373372
project {
374373
id = '282001'
375-
releaseType = 'release'
374+
releaseType = 'alpha'
376375
changelog = "Release notes can be found on the GitHub repository (https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
377376

378377
relations {
@@ -450,7 +449,7 @@ githubRelease {
450449
.takeWhile { it != 'Type "help changelog" to see the full version history.' }
451450
.join("\n").trim()
452451
}
453-
prerelease false
452+
prerelease true
454453
}
455454

456455
def uploadTasks = ["uploadArchives", "curseforge", "githubRelease"]

config/checkstyle/checkstyle.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
<property name="file" value="config/checkstyle/suppressions.xml" />
1111
</module>
1212

13+
<module name="BeforeExecutionExclusionFileFilter">
14+
<property name="fileNamePattern" value="render_old"/>
15+
</module>
16+
1317
<module name="TreeWalker">
1418
<!-- Annotations -->
1519
<module name="AnnotationLocation" />

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
mod_version=1.86.2
33

44
# Minecraft properties (update mods.toml when changing)
5-
mc_version=1.14.4
6-
forge_version=28.1.71
7-
mappings_version=20191123-1.14.3
5+
mc_version=1.15.2
6+
forge_version=31.0.1
7+
mappings_version=20200124-1.15.1
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* This file is part of the public ComputerCraft API - http://www.computercraft.info
3+
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
4+
* For help using the API, and posting your mods, visit the forums at computercraft.info.
5+
*/
6+
package dan200.computercraft.api.client;
7+
8+
import net.minecraft.client.Minecraft;
9+
import net.minecraft.client.renderer.TransformationMatrix;
10+
import net.minecraft.client.renderer.model.IBakedModel;
11+
import net.minecraft.client.renderer.model.ModelManager;
12+
import net.minecraft.client.renderer.model.ModelResourceLocation;
13+
import net.minecraft.item.ItemStack;
14+
15+
import javax.annotation.Nonnull;
16+
import java.util.Objects;
17+
18+
/**
19+
* A model to render, combined with a transformation matrix to apply.
20+
*/
21+
public final class TransformedModel
22+
{
23+
private final IBakedModel model;
24+
private final TransformationMatrix matrix;
25+
26+
public TransformedModel( @Nonnull IBakedModel model, @Nonnull TransformationMatrix matrix )
27+
{
28+
this.model = Objects.requireNonNull( model );
29+
this.matrix = Objects.requireNonNull( matrix );
30+
}
31+
32+
public TransformedModel( @Nonnull IBakedModel model )
33+
{
34+
this.model = Objects.requireNonNull( model );
35+
this.matrix = TransformationMatrix.identity();
36+
}
37+
38+
public static TransformedModel of( @Nonnull ModelResourceLocation location )
39+
{
40+
ModelManager modelManager = Minecraft.getInstance().getModelManager();
41+
return new TransformedModel( modelManager.getModel( location ) );
42+
}
43+
44+
public static TransformedModel of( @Nonnull ItemStack item, @Nonnull TransformationMatrix transform )
45+
{
46+
IBakedModel model = Minecraft.getInstance().getItemRenderer().getItemModelMesher().getItemModel( item );
47+
return new TransformedModel( model, transform );
48+
}
49+
50+
@Nonnull
51+
public IBakedModel getModel()
52+
{
53+
return model;
54+
}
55+
56+
@Nonnull
57+
public TransformationMatrix getMatrix()
58+
{
59+
return matrix;
60+
}
61+
}

src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
package dan200.computercraft.api.turtle;
77

88
import dan200.computercraft.api.ComputerCraftAPI;
9+
import dan200.computercraft.api.client.TransformedModel;
910
import dan200.computercraft.api.peripheral.IPeripheral;
1011
import dan200.computercraft.api.turtle.event.TurtleAttackEvent;
1112
import dan200.computercraft.api.turtle.event.TurtleBlockEvent;
12-
import net.minecraft.client.renderer.model.IBakedModel;
1313
import net.minecraft.client.renderer.model.ModelResourceLocation;
1414
import net.minecraft.item.ItemStack;
1515
import net.minecraft.util.Direction;
@@ -18,11 +18,9 @@
1818
import net.minecraftforge.api.distmarker.OnlyIn;
1919
import net.minecraftforge.event.entity.player.AttackEntityEvent;
2020
import net.minecraftforge.event.world.BlockEvent;
21-
import org.apache.commons.lang3.tuple.Pair;
2221

2322
import javax.annotation.Nonnull;
2423
import javax.annotation.Nullable;
25-
import javax.vecmath.Matrix4f;
2624

2725
/**
2826
* The primary interface for defining an update for Turtles. A turtle update
@@ -126,12 +124,11 @@ default TurtleCommandResult useTool( @Nonnull ITurtleAccess turtle, @Nonnull Tur
126124
*
127125
* @param turtle Access to the turtle that the upgrade resides on. This will be null when getting item models!
128126
* @param side Which side of the turtle (left or right) the upgrade resides on.
129-
* @return The model that you wish to be used to render your upgrade, and a transformation to apply to it. Returning
130-
* a transformation of {@code null} has the same effect as the identify matrix.
127+
* @return The model that you wish to be used to render your upgrade.
131128
*/
132129
@Nonnull
133130
@OnlyIn( Dist.CLIENT )
134-
Pair<IBakedModel, Matrix4f> getModel( @Nullable ITurtleAccess turtle, @Nonnull TurtleSide side );
131+
TransformedModel getModel( @Nullable ITurtleAccess turtle, @Nonnull TurtleSide side );
135132

136133
/**
137134
* Called once per tick for each turtle which has the upgrade equipped.

src/main/java/dan200/computercraft/client/ClientRegistry.java

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,19 @@
1111
import dan200.computercraft.shared.media.items.ItemDisk;
1212
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
1313
import dan200.computercraft.shared.util.Colour;
14-
import net.minecraft.client.Minecraft;
1514
import net.minecraft.client.renderer.model.IBakedModel;
1615
import net.minecraft.client.renderer.model.IUnbakedModel;
1716
import net.minecraft.client.renderer.model.ModelResourceLocation;
18-
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
17+
import net.minecraft.inventory.container.PlayerContainer;
1918
import net.minecraft.util.ResourceLocation;
2019
import net.minecraftforge.api.distmarker.Dist;
2120
import net.minecraftforge.client.event.ColorHandlerEvent;
2221
import net.minecraftforge.client.event.ModelBakeEvent;
2322
import net.minecraftforge.client.event.ModelRegistryEvent;
2423
import net.minecraftforge.client.event.TextureStitchEvent;
25-
import net.minecraftforge.client.model.BasicState;
2624
import net.minecraftforge.client.model.ModelLoader;
2725
import net.minecraftforge.client.model.ModelLoaderRegistry;
26+
import net.minecraftforge.client.model.SimpleModelTransform;
2827
import net.minecraftforge.eventbus.api.SubscribeEvent;
2928
import net.minecraftforge.fml.common.Mod;
3029

@@ -71,13 +70,13 @@ private ClientRegistry() {}
7170
@SubscribeEvent
7271
public static void registerModels( ModelRegistryEvent event )
7372
{
74-
ModelLoaderRegistry.registerLoader( TurtleModelLoader.INSTANCE );
73+
ModelLoaderRegistry.registerLoader( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ), TurtleModelLoader.INSTANCE );
7574
}
7675

7776
@SubscribeEvent
7877
public static void onTextureStitchEvent( TextureStitchEvent.Pre event )
7978
{
80-
if( event.getMap() != Minecraft.getInstance().getTextureMap() ) return;
79+
if( !event.getMap().getBasePath().equals( PlayerContainer.LOCATION_BLOCKS_TEXTURE ) ) return;
8180

8281
for( String extra : EXTRA_TEXTURES )
8382
{
@@ -92,29 +91,18 @@ public static void onModelBakeEvent( ModelBakeEvent event )
9291
ModelLoader loader = event.getModelLoader();
9392
Map<ResourceLocation, IBakedModel> registry = event.getModelRegistry();
9493

95-
for( String model : EXTRA_MODELS )
94+
for( String modelName : EXTRA_MODELS )
9695
{
97-
IBakedModel bakedModel = bake( loader, loader.getUnbakedModel( new ResourceLocation( ComputerCraft.MOD_ID, "item/" + model ) ) );
96+
ResourceLocation location = new ResourceLocation( ComputerCraft.MOD_ID, "item/" + modelName );
97+
IUnbakedModel model = loader.getUnbakedModel( location );
98+
model.getTextures( loader::getUnbakedModel, new HashSet<>() );
9899

99-
if( bakedModel != null )
100+
IBakedModel baked = model.bakeModel( loader, ModelLoader.defaultTextureGetter(), SimpleModelTransform.IDENTITY, location );
101+
if( baked != null )
100102
{
101-
registry.put(
102-
new ModelResourceLocation( new ResourceLocation( ComputerCraft.MOD_ID, model ), "inventory" ),
103-
bakedModel
104-
);
103+
registry.put( new ModelResourceLocation( new ResourceLocation( ComputerCraft.MOD_ID, modelName ), "inventory" ), baked );
105104
}
106105
}
107-
108-
// And load the custom turtle models in too.
109-
registry.put(
110-
new ModelResourceLocation( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_normal" ), "inventory" ),
111-
bake( loader, TurtleModelLoader.INSTANCE.loadModel( new ResourceLocation( ComputerCraft.MOD_ID, "item/turtle_normal" ) ) )
112-
);
113-
114-
registry.put(
115-
new ModelResourceLocation( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ), "inventory" ),
116-
bake( loader, TurtleModelLoader.INSTANCE.loadModel( new ResourceLocation( ComputerCraft.MOD_ID, "item/turtle_advanced" ) ) )
117-
);
118106
}
119107

120108
@SubscribeEvent
@@ -153,15 +141,4 @@ public static void onItemColours( ColorHandlerEvent.Item event )
153141
ComputerCraft.Blocks.turtleNormal, ComputerCraft.Blocks.turtleAdvanced
154142
);
155143
}
156-
157-
private static IBakedModel bake( ModelLoader loader, IUnbakedModel model )
158-
{
159-
model.getTextures( loader::getUnbakedModel, new HashSet<>() );
160-
161-
return model.bake(
162-
loader,
163-
ModelLoader.defaultTextureGetter(),
164-
new BasicState( model.getDefaultState(), false ), DefaultVertexFormats.BLOCK
165-
);
166-
}
167144
}

0 commit comments

Comments
 (0)