From 88abb5f00603646085c5829a7a08d3483f0d5398 Mon Sep 17 00:00:00 2001 From: asie <kontakt@asie.pl> Date: Wed, 21 Nov 2018 18:47:27 +0100 Subject: [PATCH] update to 18w47a, add FabricBlockBuilder --- build.gradle | 4 +- .../fabric/helpers/FabricBlockBuilder.java | 137 ++++++++++++++++++ .../mixin/helpers/MixinBlockBuilder.java | 95 ++++++++++++ .../mixin/registry/MixinIdRegistry.java | 2 +- .../net.fabricmc.fabric.mixins.common.json | 1 + 5 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/fabricmc/fabric/helpers/FabricBlockBuilder.java create mode 100644 src/main/java/net/fabricmc/fabric/mixin/helpers/MixinBlockBuilder.java diff --git a/build.gradle b/build.gradle index d51188b9b..c0376bccd 100644 --- a/build.gradle +++ b/build.gradle @@ -30,8 +30,8 @@ minecraft { } dependencies { - minecraft "com.mojang:minecraft:18w46a" - mappings "net.fabricmc:pomf:18w46a.6" + minecraft "com.mojang:minecraft:18w47a" + mappings "net.fabricmc:pomf:18w47a.2" modCompile "net.fabricmc:fabric-loader:18w44a-0.1.0.46" } diff --git a/src/main/java/net/fabricmc/fabric/helpers/FabricBlockBuilder.java b/src/main/java/net/fabricmc/fabric/helpers/FabricBlockBuilder.java new file mode 100644 index 000000000..6c894cb76 --- /dev/null +++ b/src/main/java/net/fabricmc/fabric/helpers/FabricBlockBuilder.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2016, 2017, 2018 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.helpers; + +import net.minecraft.block.Block; +import net.minecraft.block.Material; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.DyeColor; +import net.minecraft.util.Identifier; +import net.minecraft.util.MapColor; +import net.minecraft.world.loot.LootTables; + +import java.util.function.Function; + +public class FabricBlockBuilder { + public interface Delegate { + void fabric_setMapColor(MapColor color); + void fabric_setCollidable(boolean value); + void fabric_setSoundGroup(BlockSoundGroup group); + void fabric_setLuminance(int value); + void fabric_setHardness(float value); + void fabric_setResistance(float value); + void fabric_setRandomTicks(boolean value); + void fabric_setFriction(float value); + void fabric_setDropTable(Identifier id); + } + + private final Block.Builder delegate; + private final FabricBlockBuilder.Delegate castDelegate; + + protected FabricBlockBuilder(Material material) { + delegate = Block.Builder.create(material); + castDelegate = (FabricBlockBuilder.Delegate) delegate; + } + + protected FabricBlockBuilder(Block base) { + delegate = Block.Builder.copy(base); + castDelegate = (FabricBlockBuilder.Delegate) delegate; + } + + public static FabricBlockBuilder create(Material material) { + return new FabricBlockBuilder(material); + } + + public static FabricBlockBuilder copy(Block base) { + return new FabricBlockBuilder(base); + } + + public FabricBlockBuilder setMapColor(MapColor color) { + castDelegate.fabric_setMapColor(color); + return this; + } + + public FabricBlockBuilder setMapColor(DyeColor color) { + castDelegate.fabric_setMapColor(color.getMapColor()); + return this; + } + + public FabricBlockBuilder setCollidable(boolean value) { + castDelegate.fabric_setCollidable(value); + return this; + } + + public FabricBlockBuilder setSoundGroup(BlockSoundGroup group) { + castDelegate.fabric_setSoundGroup(group); + return this; + } + + public FabricBlockBuilder acceptRandomTicks() { + castDelegate.fabric_setRandomTicks(true); + return this; + } + + public FabricBlockBuilder setLuminance(int value) { + castDelegate.fabric_setLuminance(value); + return this; + } + + public FabricBlockBuilder setHardness(float value) { + castDelegate.fabric_setHardness(value); + castDelegate.fabric_setResistance(value); + return this; + } + + public FabricBlockBuilder setResistance(float value) { + castDelegate.fabric_setResistance(value); + return this; + } + + public FabricBlockBuilder setStrength(float hardness, float resistance) { + castDelegate.fabric_setHardness(hardness); + castDelegate.fabric_setResistance(resistance); + return this; + } + + public FabricBlockBuilder noDropTable() { + castDelegate.fabric_setDropTable(LootTables.EMPTY); + return this; + } + + public FabricBlockBuilder copyDropTable(Block block) { + castDelegate.fabric_setDropTable(block.getDropTableId()); + return this; + } + + public FabricBlockBuilder setDropTable(Identifier id) { + castDelegate.fabric_setDropTable(id); + return this; + } + + public FabricBlockBuilder setFrictionCoefficient(float value) { + castDelegate.fabric_setFriction(value); + return this; + } + + public Block.Builder build() { + return delegate; + } + + public <T> T build(Function<Block.Builder, T> function) { + return function.apply(delegate); + } +} diff --git a/src/main/java/net/fabricmc/fabric/mixin/helpers/MixinBlockBuilder.java b/src/main/java/net/fabricmc/fabric/mixin/helpers/MixinBlockBuilder.java new file mode 100644 index 000000000..7b9423898 --- /dev/null +++ b/src/main/java/net/fabricmc/fabric/mixin/helpers/MixinBlockBuilder.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2016, 2017, 2018 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.mixin.helpers; + +import net.fabricmc.fabric.helpers.FabricBlockBuilder; +import net.minecraft.block.Block; +import net.minecraft.block.Material; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.MapColor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(Block.Builder.class) +public class MixinBlockBuilder implements FabricBlockBuilder.Delegate { + @Shadow + private Material material; + @Shadow + private MapColor mapColor; + @Shadow + private boolean collidable; + @Shadow + private BlockSoundGroup soundGroup; + @Shadow + private int luminance; + @Shadow + private float resistance; + @Shadow + private float hardness; + @Shadow + private boolean randomTicks; + @Shadow + private float friction; + @Shadow + private Identifier dropTableId; + + @Override + public void fabric_setMapColor(MapColor color) { + mapColor = color; + } + + @Override + public void fabric_setCollidable(boolean value) { + collidable = value; + } + + @Override + public void fabric_setSoundGroup(BlockSoundGroup group) { + soundGroup = group; + } + + @Override + public void fabric_setLuminance(int value) { + luminance = value; + } + + @Override + public void fabric_setHardness(float value) { + hardness = value; + } + + @Override + public void fabric_setResistance(float value) { + resistance = Math.max(0.0f, value); + } + + @Override + public void fabric_setRandomTicks(boolean value) { + randomTicks = value; + } + + @Override + public void fabric_setFriction(float value) { + friction = value; + } + + @Override + public void fabric_setDropTable(Identifier id) { + dropTableId = id; + } +} diff --git a/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java b/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java index 986788bb6..a12ed2f40 100644 --- a/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java +++ b/src/main/java/net/fabricmc/fabric/mixin/registry/MixinIdRegistry.java @@ -91,7 +91,7 @@ public abstract class MixinIdRegistry<T> implements RemappableRegistry, Listenab Object defaultValue = null; //noinspection ConstantConditions if (registry instanceof DefaultMappedRegistry) { - defaultValue = registry.get(((DefaultMappedRegistry) registry).method_10137()); + defaultValue = registry.get(((DefaultMappedRegistry) registry).getDefaultId()); } if (!reallocateMissingEntries && !idMap.keySet().equals(registry.keys())) { diff --git a/src/main/resources/net.fabricmc.fabric.mixins.common.json b/src/main/resources/net.fabricmc.fabric.mixins.common.json index 294b79131..32c2aa3c3 100644 --- a/src/main/resources/net.fabricmc.fabric.mixins.common.json +++ b/src/main/resources/net.fabricmc.fabric.mixins.common.json @@ -4,6 +4,7 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "commands.MixinServerCommandManager", + "helpers.MixinBlockBuilder", "networking.MixinServerPlayNetworkHandler", "networking.MixinSPacketCustomPayload", "registry.MixinBootstrap",