This commit is contained in:
paulevsGitch 2020-09-30 12:02:20 +03:00
parent 29a9c9f613
commit 419d8a2dab
11 changed files with 93 additions and 26 deletions

View file

@ -1,7 +1,6 @@
package ru.betterend.blocks;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import ru.betterend.blocks.basis.BlockFeatureSapling;
import ru.betterend.registry.FeatureRegistry;
@ -11,7 +10,7 @@ public class BlockMossyGlowshroomSapling extends BlockFeatureSapling {
}
@Override
protected Feature<DefaultFeatureConfig> getFeature() {
return FeatureRegistry.MOSSY_GLOWSHROOM.getFeature();
protected ConfiguredFeature<?,?> getFeature() {
return FeatureRegistry.MOSSY_GLOWSHROOM.getFeatureConfigured();
}
}

View file

@ -18,8 +18,7 @@ import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.WorldView;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import ru.betterend.client.ERenderLayer;
import ru.betterend.client.IRenderTypeable;
import ru.betterend.registry.BlockTagRegistry;
@ -47,7 +46,7 @@ public abstract class BlockFeatureSapling extends BlockBaseNotFull implements Fe
.ticksRandomly());
}
protected abstract Feature<DefaultFeatureConfig> getFeature();
protected abstract ConfiguredFeature<?,?> getFeature();
@Override
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) {
@ -79,8 +78,8 @@ public abstract class BlockFeatureSapling extends BlockBaseNotFull implements Fe
@Override
public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) {
BlocksHelper.setWithoutUpdate(world, pos, Blocks.AIR.getDefaultState());
getFeature().generate(world, world.getChunkManager().getChunkGenerator(), random, pos, DefaultFeatureConfig.INSTANCE);
BlocksHelper.setWithoutUpdate(world, pos, Blocks.AIR.getDefaultState());
getFeature().generate(world, world.getChunkManager().getChunkGenerator(), random, pos);
}
@Override

View file

@ -8,6 +8,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.recipebook.BlastFurnaceRecipeBookScreen;
@ -18,6 +19,7 @@ import net.minecraft.recipe.Ingredient;
import net.minecraft.recipe.Recipe;
import net.minecraft.screen.slot.Slot;
import net.minecraft.util.collection.DefaultedList;
import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity;
@Environment(EnvType.CLIENT)
@ -33,6 +35,14 @@ public class EndStoneSmelterRecipeBookScreen extends BlastFurnaceRecipeBookScree
return EndStoneSmelterBlockEntity.availableFuels().keySet();
}
@Override
public void slotClicked(Slot slot) {
super.slotClicked(slot);
if (slot != null && slot.id < this.craftingScreenHandler.getCraftingSlotCount()) {
this.fuelSlot = null;
}
}
@Override
public void showGhostRecipe(Recipe<?> recipe, List<Slot> slots) {
this.ghostSlots.reset();

View file

@ -3,6 +3,7 @@ package ru.betterend.client.gui;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
@ -19,6 +20,7 @@ import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.screen.slot.Slot;
import net.minecraft.util.Identifier;
import net.minecraft.world.World;
import ru.betterend.BetterEnd;
import ru.betterend.blocks.EndStoneSmelter;
import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity;

View file

@ -0,0 +1,21 @@
package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.DefaultBiomeCreator;
import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.gen.GenerationStep;
import ru.betterend.registry.FeatureRegistry;
@Mixin(DefaultBiomeCreator.class)
public abstract class DefaultBiomeCreatorMixin {
@Inject(method = "composeEndSpawnSettings(Lnet/minecraft/world/biome/GenerationSettings$Builder;)Lnet/minecraft/world/biome/Biome;", at = @At("HEAD"))
private static void addEndOres(GenerationSettings.Builder builder, CallbackInfoReturnable<Biome> rcinfo) {
//builder.feature(GenerationStep.Feature.UNDERGROUND_ORES, FeatureRegistry.ENDER_ORE.getFeatureConfigured());
}
}

View file

@ -33,10 +33,10 @@ public class AlloyingRecipe implements Recipe<Inventory> {
protected final int smeltTime;
public AlloyingRecipe(Identifier id, Ingredient primaryInput, Ingredient secondaryInput,
public AlloyingRecipe(Identifier id, String group, Ingredient primaryInput, Ingredient secondaryInput,
ItemStack output, float experience, int smeltTime) {
this.group = String.format("%s:%s", GROUP, id.getPath());
this.group = group;
this.id = id;
this.primaryInput = primaryInput;
this.secondaryInput = secondaryInput;
@ -113,6 +113,7 @@ public class AlloyingRecipe implements Recipe<Inventory> {
public static Builder create(String id) {
INSTANCE.id = BetterEnd.getResId(id);
INSTANCE.group = String.format("%s:%s", GROUP, id);
INSTANCE.primaryInput = null;
INSTANCE.secondaryInput = null;
INSTANCE.output = null;
@ -126,11 +127,17 @@ public class AlloyingRecipe implements Recipe<Inventory> {
private Ingredient primaryInput;
private Ingredient secondaryInput;
private ItemStack output;
private String group;
private float experience;
private int smeltTime;
private Builder() {}
public Builder setGroup(String group) {
this.group = group;
return this;
}
public Builder setPrimaryInput(ItemConvertible... inputs) {
this.primaryInput = Ingredient.ofItems(inputs);
return this;
@ -192,7 +199,7 @@ public class AlloyingRecipe implements Recipe<Inventory> {
} else if(output == null) {
throw new IllegalArgumentException("Output can't be null!");
}
EndRecipeManager.addRecipe(AlloyingRecipe.TYPE, new AlloyingRecipe(id, primaryInput, secondaryInput, output, experience, smeltTime));
EndRecipeManager.addRecipe(AlloyingRecipe.TYPE, new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime));
}
}
}

View file

@ -19,6 +19,7 @@ public class AlloyingRecipeSerializer implements RecipeSerializer<AlloyingRecipe
Ingredient primaryInput = Ingredient.fromJson(ingredients.get(0));
Ingredient secondaryInput = Ingredient.fromJson(ingredients.get(1));
String rusultStr = JsonHelper.getString(json, "result");
String group = JsonHelper.getString(json, "group", "");
Identifier resultId = new Identifier(rusultStr);
ItemStack output = new ItemStack(Registry.ITEM.getOrEmpty(resultId).orElseThrow(() -> {
return new IllegalStateException("Item: " + rusultStr + " does not exist");
@ -26,22 +27,24 @@ public class AlloyingRecipeSerializer implements RecipeSerializer<AlloyingRecipe
float experience = JsonHelper.getFloat(json, "experience", 0.0F);
int smeltTime = JsonHelper.getInt(json, "smelttime", 350);
return new AlloyingRecipe(id, primaryInput, secondaryInput, output, experience, smeltTime);
return new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime);
}
@Override
public AlloyingRecipe read(Identifier id, PacketByteBuf packetBuffer) {
String group = packetBuffer.readString();
Ingredient primaryInput = Ingredient.fromPacket(packetBuffer);
Ingredient secondaryInput = Ingredient.fromPacket(packetBuffer);
ItemStack output = packetBuffer.readItemStack();
float experience = packetBuffer.readFloat();
int smeltTime = packetBuffer.readVarInt();
return new AlloyingRecipe(id, primaryInput, secondaryInput, output, experience, smeltTime);
return new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime);
}
@Override
public void write(PacketByteBuf packetBuffer, AlloyingRecipe recipe) {
packetBuffer.writeString(recipe.group);
recipe.primaryInput.write(packetBuffer);
recipe.secondaryInput.write(packetBuffer);
packetBuffer.writeItemStack(recipe.output);

View file

@ -6,7 +6,8 @@ import ru.betterend.world.features.MossyGlowshroomFeature;
public class FeatureRegistry {
public static final EndFeature MOSSY_GLOWSHROOM = new EndFeature("mossy_glowshroom", new MossyGlowshroomFeature(), 1);
public static final EndFeature END_LAKE = EndFeature.MakeLakeFeature("end_lake", new EndLakeFeature(), 100);
public static final EndFeature END_LAKE = EndFeature.makeLakeFeature("end_lake", new EndLakeFeature(), 100);
public static final EndFeature ENDER_ORE = EndFeature.makeOreFeature("ender_ore", BlockRegistry.ENDER_ORE, 2, 3, 0, 4, 128);
public static void register() {}
}

View file

@ -12,6 +12,7 @@ public class BiomeFoggyMushroomland extends EndBiome {
.setWaterFogColor(119, 227, 250)
.setSurface(BlockRegistry.END_MOSS, BlockRegistry.END_MYCELIUM)
.addFeature(FeatureRegistry.END_LAKE)
.addFeature(FeatureRegistry.MOSSY_GLOWSHROOM));
.addFeature(FeatureRegistry.MOSSY_GLOWSHROOM)
.addFeature(FeatureRegistry.ENDER_ORE));
}
}

View file

@ -1,56 +1,79 @@
package ru.betterend.world.features;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.structure.rule.BlockMatchRuleTest;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.decorator.ChanceDecoratorConfig;
import net.minecraft.world.gen.decorator.Decorator;
import net.minecraft.world.gen.decorator.RangeDecoratorConfig;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.ConfiguredFeatures;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.FeatureConfig;
import net.minecraft.world.gen.feature.OreFeatureConfig;
import ru.betterend.BetterEnd;
public class EndFeature {
private final Feature<DefaultFeatureConfig> feature;
private final ConfiguredFeature<?, ?> featureConfigured;
private final GenerationStep.Feature featureStep;
private Feature<?> feature;
private ConfiguredFeature<?, ?> featureConfigured;
private GenerationStep.Feature featureStep;
private EndFeature() {}
public EndFeature(String name, Feature<DefaultFeatureConfig> feature, GenerationStep.Feature featureStep, ConfiguredFeature<?, ?> configuredFeature) {
Identifier id = new Identifier(BetterEnd.MOD_ID, name);
Identifier id = BetterEnd.getResId(name);
this.featureStep = featureStep;
this.feature = Registry.register(Registry.FEATURE, id, feature);
this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, configuredFeature);
}
public EndFeature(String name, Feature<DefaultFeatureConfig> feature) {
Identifier id = new Identifier(BetterEnd.MOD_ID, name);
Identifier id = BetterEnd.getResId(name);
this.featureStep = GenerationStep.Feature.VEGETAL_DECORATION;
this.feature = Registry.register(Registry.FEATURE, id, feature);
this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(Decorator.CHANCE.configure(new ChanceDecoratorConfig(100))));
}
public EndFeature(String name, Feature<DefaultFeatureConfig> feature, int density) {
Identifier id = new Identifier(BetterEnd.MOD_ID, name);
Identifier id = BetterEnd.getResId(name);
this.featureStep = GenerationStep.Feature.VEGETAL_DECORATION;
this.feature = Registry.register(Registry.FEATURE, id, feature);
this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(ConfiguredFeatures.Decorators.SQUARE_HEIGHTMAP).repeatRandomly(density));
//return new EndFeature(name, feature, GenerationStep.Feature.VEGETAL_DECORATION, feature.configure(FeatureConfig.DEFAULT).decorate(ConfiguredFeatures.Decorators.SQUARE_HEIGHTMAP).repeatRandomly(4));
}
public static EndFeature MakeRawGenFeature(String name, Feature<DefaultFeatureConfig> feature, int chance) {
public static EndFeature makeRawGenFeature(String name, Feature<DefaultFeatureConfig> feature, int chance) {
ConfiguredFeature<?, ?> configured = feature.configure(FeatureConfig.DEFAULT).decorate(Decorator.CHANCE.configure(new ChanceDecoratorConfig(100)));
return new EndFeature(name, feature, GenerationStep.Feature.RAW_GENERATION, configured);
}
public static EndFeature MakeLakeFeature(String name, Feature<DefaultFeatureConfig> feature, int chance) {
public static EndFeature makeLakeFeature(String name, Feature<DefaultFeatureConfig> feature, int chance) {
ConfiguredFeature<?, ?> configured = feature.configure(FeatureConfig.DEFAULT).decorate(Decorator.CHANCE.configure(new ChanceDecoratorConfig(100)));
return new EndFeature(name, feature, GenerationStep.Feature.LAKES, configured);
}
public Feature<DefaultFeatureConfig> getFeature() {
public static EndFeature makeOreFeature(String name, Block blockOre, int veins, int veinSize, int offset, int minY, int maxY) {
EndFeature newFeature = new EndFeature();
OreFeatureConfig featureConfig = new OreFeatureConfig(new BlockMatchRuleTest(Blocks.END_STONE), blockOre.getDefaultState(), veinSize);
RangeDecoratorConfig rangeDecorator = new RangeDecoratorConfig(offset, minY, maxY);
ConfiguredFeature<?, ?> oreFeature = Feature.ORE.configure(featureConfig)
.decorate(Decorator.RANGE.configure(rangeDecorator))
.spreadHorizontally()
.repeat(veins);
newFeature.feature = Feature.ORE;
newFeature.featureStep = GenerationStep.Feature.UNDERGROUND_ORES;
newFeature.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, BetterEnd.getResId(name), oreFeature);
return newFeature;
}
public Feature<?> getFeature() {
return feature;
}

View file

@ -9,6 +9,7 @@
"ServerPlayNetworkHandlerMixin",
"TagGroupLoaderMixin",
"CraftingScreenHandlerMixin",
"DefaultBiomeCreatorMixin",
"TagAccessor"
],
"injectors": {