Jump to content

wilpito

Members
  • Posts

    12
  • Joined

  • Last visited

Everything posted by wilpito

  1. Hello QuantumSoul, I've Changed, but the Problem wil be the same: OIL_FEATURE has a Name but a value of null. OIL_FEATURE.get() will return null. So it can't be used in the ... ConfFeature1 = OIL_FEATURE.get().withConfiguration( ... I've deleted MyFeature and the WorldGen Class. Both are not nessesary to demonstrate the error and put the functionality together in FeatureInit. I've tried a Dynamic initialisation and a static Initialisation. The last one you can see here: The startup i've put in eamoleMod in : private void setup(final FMLCommonSetupEvent event) { // some preinit code LOGGER.info("HELLO FROM PREINIT"); LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName()); final IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); FeatureInit.FEATURES.register(eventBus); } I think there may be an Error in OilFeature or oilFeatureConfig or i call the FeatureInit at the wrong time.
  2. I have a problem to register my Oil Feature. Im working on this problem about 2 Weeks. Can somebody help me. Iv'e tried a lot of Workarounds in 1.16.2 and 1.16.5 but the value of OIL_FEATURE will allways be null. #1: The Crash Report [13:45:50] [Render thread/INFO] [STDOUT/]: [net.minecraft.crash.CrashReport:makeCategoryDepth:227]: Negative index in crash report handler (21/23) [13:45:50] [Render thread/FATAL] [ne.mi.fm.cl.ClientModLoader/]: Crash report saved to .\crash-reports\crash-2021-02-20_13.45.50-fml.txt ---- Minecraft Crash Report ---- // I bet Cylons wouldn't have this problem. Time: 20.02.21 13:45 Description: Mod loading error has occurred java.lang.Exception: Mod Loading has failed at net.minecraftforge.fml.CrashReportExtender.dumpModLoadingCrashReport(CrashReportExtender.java:85) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading} at net.minecraftforge.fml.client.ClientModLoader.completeModLoading(ClientModLoader.java:188) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.lambda$null$1(Minecraft.java:513) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.util.Util.acceptOrElse(Util.java:323) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading} at net.minecraft.client.Minecraft.lambda$new$2(Minecraft.java:509) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.gui.ResourceLoadProgressGui.render(ResourceLoadProgressGui.java:113) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.renderer.GameRenderer.updateCameraAndRender(GameRenderer.java:492) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1002) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.run(Minecraft.java:612) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:184) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201] {} at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201] {} at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201] {} at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201] {} at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:52) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-8.0.9.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-8.0.9.jar:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-8.0.9.jar:?] {} at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [modlauncher-8.0.9.jar:?] {} at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.0.9.jar:?] {} at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:105) [forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace: at java.util.Objects.requireNonNull(Objects.java:290) ~[?:1.8.0_201] {} -- MOD examplemod -- Details: Mod File: main Failure message: Example Mod (examplemod) encountered an error during the common_setup event phase java.lang.NullPointerException: Registry Object not present: exampe_mod:oil_feature Mod Version: NONE Mod Issue URL: http://my.issue.tracker/ Exception message: java.lang.NullPointerException: Registry Object not present: exampe_mod:oil_feature Stacktrace: at java.util.Objects.requireNonNull(Objects.java:290) ~[?:1.8.0_201] {} at net.minecraftforge.fml.RegistryObject.get(RegistryObject.java:120) ~[forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-recomp.jar:?] {re:classloading} at com.example.examplemod.worldgen.WorldGen.initGen(WorldGen.java:19) ~[main/:?] {re:classloading} at com.example.examplemod.ExampleMod.setup(ExampleMod.java:53) ~[main/:?] {re:classloading} at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) ~[eventbus-4.0.0.jar:?] {} at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) ~[eventbus-4.0.0.jar:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-4.0.0.jar:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-4.0.0.jar:?] {} at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:120) ~[forge:35.1] {re:classloading} at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$4(ModContainer.java:121) ~[forge:?] {re:classloading} at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626) ~[?:1.8.0_201] {} at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618) ~[?:1.8.0_201] {} at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_201] {} at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) ~[?:1.8.0_201] {} at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) ~[?:1.8.0_201] {} at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) ~[?:1.8.0_201] {} -- System Details -- Details: Minecraft Version: 1.16.4 Minecraft Version ID: 1.16.4 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_201, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 2298261808 bytes (2191 MB) / 3393716224 bytes (3236 MB) up to 7594835968 bytes (7243 MB) CPUs: 8 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump ModLauncher: 8.0.9+86+master.3cf110c ModLauncher launch target: fmluserdevclient ModLauncher naming: mcp ModLauncher services: /mixin-0.8.2.jar mixin PLUGINSERVICE /eventbus-4.0.0.jar eventbus PLUGINSERVICE /forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-launcher.jar object_holder_definalize PLUGINSERVICE /forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-launcher.jar runtime_enum_extender PLUGINSERVICE /accesstransformers-3.0.1.jar accesstransformer PLUGINSERVICE /forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-launcher.jar capability_inject_definalize PLUGINSERVICE /forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-launcher.jar runtimedistcleaner PLUGINSERVICE /mixin-0.8.2.jar mixin TRANSFORMATIONSERVICE /forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16.3-launcher.jar fml TRANSFORMATIONSERVICE FML: 35.1 Forge: net.minecraftforge:35.1.37 FML Language Providers: javafml@35.1 minecraft@1 Mod List: client-extra.jar |Minecraft |minecraft |1.16.4 |SIDED_SETU|a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f forge-1.16.4-35.1.37_mapped_snapshot_20201028-1.16|Forge |forge |35.1.37 |SIDED_SETU|NOSIGNATURE main |Example Mod |examplemod |NONE |ERROR |NOSIGNATURE Crash Report UUID: 1249c6e1-7cb9-4a38-b3b0-ce4f9ac298b2[13:45:55] [Render thread/INFO] [minecraft/Minecraft]: Stopping! #2) Changes in Main File: private void setup(final FMLCommonSetupEvent event) { // some preinit code LOGGER.info("HELLO FROM PREINIT"); LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName()); MyFeature.init(); WorldGen.initGen(); } 3.) My Feature package com.example.examplemod.worldgen; import java.util.function.Supplier; import com.example.examplemod.ExampleMod; import com.mojang.serialization.Codec; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.IFeatureConfig; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public abstract class MyFeature<FC extends IFeatureConfig> extends Feature<FC> { public static final DeferredRegister<Feature<?>> FEATURES = DeferredRegister.create(ForgeRegistries.FEATURES,ExampleMod.MODID); public static final Supplier<OilFeature> sup = () -> new OilFeature(OilFeatureConfig.CODEC ); public static final RegistryObject<OilFeature> OIL_FEATURE = FEATURES.register("oil_feature",sup); // OilFeatureConfig.CODEC) ); public MyFeature(Codec<FC> codec) { super(codec); } public ConfiguredFeature<FC, ?> withConfiguration(FC config) { return new ConfiguredFeature<>(this, config); } public static void init() { }; } #3: WorldGen package com.example.examplemod.worldgen; import net.minecraft.block.Blocks; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.OreFeatureConfig; public class WorldGen { public static void initGen() { OilFeatureConfig OFC = new OilFeatureConfig( OreFeatureConfig.FillerBlockType.BASE_STONE_OVERWORLD, Blocks.GOLD_BLOCK.getDefaultState(), 1, //Smal/mediumLarge Lake 60, //Realize % of generatins 1, //Mit Steinen umrandet 5, //lakes.minHeight, / /Min Height Placement 63 //lakes.maxHeight / / Max Height ); ConfiguredFeature<?, ?> ConfFeature = MyFeature.OIL_FEATURE.get().withConfiguration(OFC); //... } } #4: OilFeatureConfig package com.example.examplemod.worldgen; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; import net.minecraft.world.gen.feature.IFeatureConfig; import net.minecraft.world.gen.feature.template.RuleTest; public class OilFeatureConfig implements IFeatureConfig { //public static final OilFeatureConfig field_236559_b_ = new OilFeatureConfig(); public static final Codec<OilFeatureConfig> CODEC = RecordCodecBuilder.create((p_236568_0_) -> { return p_236568_0_.group(RuleTest.field_237127_c_.fieldOf("target").forGetter((config) -> { return config.target; }), BlockState.CODEC.fieldOf("state").forGetter((config) -> { return config.state; }), Codec.intRange(0, 64).fieldOf("size").forGetter((config) -> { return config.size; }), Codec.intRange(0, 64).fieldOf("realize").forGetter((config) -> { return config.realize; }), Codec.intRange(0, 64).fieldOf("mode").forGetter((config) -> { return config.mode; }), Codec.intRange(0, 256).fieldOf("minheight").forGetter((config) -> { return config.minheigth; }), Codec.intRange(0, 256).fieldOf("maxheight").forGetter((config) -> { return config.maxheigth; })).apply(p_236568_0_, OilFeatureConfig::new); }); public final RuleTest target; public final int size; public final BlockState state; public final int realize; public final int mode; public final int minheigth; public final int maxheigth; public OilFeatureConfig(RuleTest p_i241989_1_, BlockState state, int size, int realize, int mode, int minheight, int maxheight) { this.size = size; this.state = state; this.target = p_i241989_1_; this.realize = realize; this.mode = mode; this.minheigth = minheight; this.maxheigth = maxheight; } public int minheight() { return this.minheigth; } public int maxheigth() { return this.maxheigth; } } #5 OilFeature package com.example.examplemod.worldgen; import java.util.Random; import com.mojang.serialization.Codec; //import com.wilpito.wilpitomod.block.ModBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.material.Material; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.SectionPos; import net.minecraft.world.ISeedReader; import net.minecraft.world.LightType; import net.minecraft.world.biome.Biome; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.NoFeatureConfig; import net.minecraft.world.gen.feature.structure.Structure; public class OilFeature extends Feature<OilFeatureConfig> { private static final BlockState AIR = Blocks.CAVE_AIR.getDefaultState(); public OilFeature(Codec<OilFeatureConfig> field236558a) { super(field236558a); } @Override public boolean generate(ISeedReader SeedReader, ChunkGenerator chunkGen, Random rand, BlockPos pos, OilFeatureConfig config) { BlockState decoBlock = Blocks.STONE.getDefaultState(); int sx=6,sy=3,sz=6; int mode = config.mode; // wahrscheinlichkeit zum platzieren: if(config.realize < rand.nextInt(100)) { return true; } // Durchmesser See festlegen if (config.size == 0) { //Small sy = 2 + rand.nextInt(2); sx = 5; sz = 5; } if (config.size == 1) { //Medium sy = 3 + rand.nextInt(2); sx = 7; sz = 7; } if (config.size == 2) { //Large sy = 4; sx = 10; sz = 10; } while(pos.getY() > 6 && SeedReader.isAirBlock(pos)) { pos = pos.down(); } Block block = SeedReader.getBlockState(pos).getBlock(); if (block == Blocks.SAND) { decoBlock = Blocks.SANDSTONE.getDefaultState(); if (mode == 0) mode = 1; } if (block == Blocks.RED_SAND) { decoBlock = Blocks.RED_SANDSTONE.getDefaultState(); if (mode == 0) mode = 1; } if (pos.getY() <= 5) { return false; } else { pos = pos.down(sy); if (SeedReader.func_241827_a(SectionPos.from(pos), Structure.VILLAGE).findAny().isPresent()) return false; else if (SeedReader.func_241827_a(SectionPos.from(pos), Structure.WOODLAND_MANSION).findAny().isPresent()) return false; boolean[] aboolean = new boolean[5760]; int i = rand.nextInt(sy) + 4; for(int j = 0; j < i; ++j) { double d0 = rand.nextDouble() * sx*2 + 3.0D; double d1 = rand.nextDouble() * 4.0D + 2.0D; double d2 = rand.nextDouble() * sy*2 + 3.0D; double d3 = rand.nextDouble() * (24.0D - d0 - 2.0D) + 1.0D + d0 / 2.0D; double d4 = rand.nextDouble() * (8.0D - d1 - 4.0D) + 2.0D + d1 / 2.0D; double d5 = rand.nextDouble() * (24.0D - d2 - 2.0D) + 1.0D + d2 / 2.0D; for(int l = 1; l < 23; ++l) { for(int i1 = 1; i1 < 23; ++i1) { for(int j1 = 1; j1 < 7; ++j1) { double d6 = ((double)l - d3) / (d0 / 2.0D); double d7 = ((double)j1 - d4) / (d1 / 2.0D); double d8 = ((double)i1 - d5) / (d2 / 2.0D); double d9 = d6 * d6 + d7 * d7 + d8 * d8; if (d9 < 1.0D) { aboolean[(l * 24 + i1) * 8 + j1] = true; } } } } } for(int k1 = 0; k1 < 24; ++k1) { for(int l2 = 0; l2 < 24; ++l2) { for(int k = 0; k < 8; ++k) { boolean flag = !aboolean[(k1 * 24 + l2) * 8 + k] && (k1 < 23 && aboolean[((k1 + 1) * 24 + l2) * 8 + k] || k1 > 0 && aboolean[((k1 - 1) * 24 + l2) * 8 + k] || l2 < 23 && aboolean[(k1 * 24 + l2 + 1) * 8 + k] || l2 > 0 && aboolean[(k1 * 24 + (l2 - 1)) * 8 + k] || k < 7 && aboolean[(k1 * 24 + l2) * 8 + k + 1] || k > 0 && aboolean[(k1 * 24 + l2) * 8 + (k - 1)]); if (flag) { Material material = SeedReader.getBlockState(pos.add(k1, k, l2)).getMaterial(); if (k >= 4 && material.isLiquid()) { return false; } if (k < 4 && !material.isSolid() && SeedReader.getBlockState(pos.add(k1, k, l2)) != config.state) { return false; } } } } } for(int l1 = 0; l1 < 24; ++l1) { for(int i3 = 0; i3 < 24; ++i3) { for(int i4 = 0; i4 < 8; ++i4) { if (aboolean[(l1 * 24 + i3) * 8 + i4]) { SeedReader.setBlockState(pos.add(l1, i4, i3), i4 >= 4 ? AIR : config.state, 2); } } } } for(int i2 = 0; i2 < 24; ++i2) { for(int j3 = 0; j3 < 24; ++j3) { for(int j4 = 4; j4 < 8; ++j4) { if (aboolean[(i2 * 24 + j3) * 8 + j4]) { BlockPos blockpos = pos.add(i2, j4 - 1, j3); if (isDirt(SeedReader.getBlockState(blockpos).getBlock()) && SeedReader.getLightFor(LightType.SKY, pos.add(i2, j4, j3)) > 0) { Biome biome = SeedReader.getBiome(blockpos); if (biome.getGenerationSettings().getSurfaceBuilderConfig().getTop().isIn(Blocks.MYCELIUM)) { SeedReader.setBlockState(blockpos, Blocks.MYCELIUM.getDefaultState(), 2); } else { SeedReader.setBlockState(blockpos, Blocks.GRASS_BLOCK.getDefaultState(), 2); } } } } } } if (mode == 1) { // Oil See with Border for(int j2 = 0; j2 < 24; ++j2) { for(int k3 = 0; k3 < 24; ++k3) { for(int k4 = 0; k4 < 8; ++k4) { boolean flag1 = !aboolean[(j2 * 24 + k3) * 8 + k4] && (j2 < 23 && aboolean[((j2 + 1) * 24 + k3) * 8 + k4] || j2 > 0 && aboolean[((j2 - 1) * 24 + k3) * 8 + k4] || k3 < 15 && aboolean[(j2 * 24 + k3 + 1) * 8 + k4] || k3 > 0 && aboolean[(j2 * 24 + (k3 - 1)) * 8 + k4] || k4 < 7 && aboolean[(j2 * 24 + k3) * 8 + k4 + 1] || k4 > 0 && aboolean[(j2 * 24 + k3) * 8 + (k4 - 1)]); if (flag1 && (k4 < 4 || rand.nextInt(2) != 0) && SeedReader.getBlockState(pos.add(j2, k4, k3)).getMaterial().isSolid()) { SeedReader.setBlockState(pos.add(j2, k4, k3), decoBlock, 2); } } } } } if (mode == 2) { // Oil See with special Border for(int j2 = 0; j2 < 24; ++j2) { for(int k3 = 0; k3 < 24; ++k3) { for(int k4 = 0; k4 < 8; ++k4) { BlockState newState = decoBlock; if (rand.nextInt(100)<15) newState = Blocks.GOLD_BLOCK.getDefaultState(); //ModBlock.getRandomBlock(rand); boolean flag1 = !aboolean[(j2 * 24 + k3) * 8 + k4] && (j2 < 23 && aboolean[((j2 + 1) * 24 + k3) * 8 + k4] || j2 > 0 && aboolean[((j2 - 1) * 24 + k3) * 8 + k4] || k3 < 15 && aboolean[(j2 * 24 + k3 + 1) * 8 + k4] || k3 > 0 && aboolean[(j2 * 24 + (k3 - 1)) * 8 + k4] || k4 < 7 && aboolean[(j2 * 24 + k3) * 8 + k4 + 1] || k4 > 0 && aboolean[(j2 * 24 + k3) * 8 + (k4 - 1)]); if (flag1 && (k4 < 4 || rand.nextInt(2) != 0) && SeedReader.getBlockState(pos.add(j2, k4, k3)).getMaterial().isSolid()) { SeedReader.setBlockState(pos.add(j2, k4, k3), newState, 2); } } } } } return true; } }
  3. Okay you are right. But the only way i know is to send an explicit message to sync between Client and Server. In old versions i've send an update when Tile value have be changed. This may have slow down perfomence. At this time i down't know how to do a sync for some values to Client Container it in 1.15.2. I'm serching for anExample for do this in 1.15.2 about 3 days... but find nothing with will work. It might verry helpfull to have some complete examples or an complete small mod to look at the code.
  4. Oky it might be a little bit strange. But i dont find an easy way to do this elsewhere. Normaly i have 6 Packet handler on the same CHANNEL.In my old Mod on 1.8 it works. Do you have an example with will work? In this forrum i only found the message class and the command line for CHANNEL.registerMessage. I kow the direction, but in this time i need to send update Information from Server to Client. In an other case i will send Setup Informations from Client to server. So i Need both directions. Current problem: i Have a tileEntity on server with wil be updatte automatiocally with new Energy by transfering Energy from nighbors. When i Open the Client Screen the current value should be shown on Scrren and can be changed by server before the Screen close. The client can't change the energy level.
  5. Ive tried to get my old Message System to work. When i send a Message from client to server it will work, when i send a Message vom server to Client I get anError: Can somebody help me. My Packet Handler: package com.wilpito.wilpitomod.handler; import com.wilpito.wilpitomod.network.MessageTileBase; import net.minecraft.client.Minecraft; import net.minecraft.network.NetworkManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkDirection; import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.simple.SimpleChannel; public class PacketHandler { private static final String PROTICOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation("wilpitomod","main") ,() -> PROTICOL_VERSION , PROTICOL_VERSION::equals , PROTICOL_VERSION::equals); public static final int TILEMSG=11; public PacketHandler() { CHANNEL.registerMessage(TILEMSG, MessageTileBase.class, MessageTileBase::encode, MessageTileBase::new,MessageTileBase::handle); } public static void TileMsgSend(MessageTileBase msg,World World){ if (!World.isRemote) return; CHANNEL.sendToServer(msg); } public static void TileMsgSendtoClient(MessageTileBase msg, World worldIn){ NetworkManager manager = Minecraft.getInstance().getConnection().getNetworkManager(); CHANNEL.sendTo(msg, manager, NetworkDirection.PLAY_TO_CLIENT); } } } My Message: package com.wilpito.wilpitomod.network; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; import java.util.function.Supplier; public class MessageTileBase { // A default constructor is always required public MessageTileBase(){} // Coordinates of Tile protected BlockPos pos; protected String text; public MessageTileBase(BlockPos pos, String text){ this.pos = pos; this.text = text; } public MessageTileBase(PacketBuffer buf) { pos = buf.readBlockPos(); text = buf.readString(); } public void encode(PacketBuffer buf) { buf.writeBlockPos(pos); buf.writeString(text); //.. Code on Client Side will folw hier.. } public void handle(Supplier<NetworkEvent.Context> context) { if (context == null) { } } } I Create the Messaeg for testing in My Tile Entity Tick() with PacketHandler.TileMsgSendtoClient(new MessageTileBase(this.pos ,"TEST"),this.world); This will work when activating Message from Client to server: PacketHandler.TileMsgSend(new MessageTileBase(new BlockPos(0,0,0),"TEST"),Minecraft.getInstance().world); I think something is wrong with the network manager. NetworkManager manager = Minecraft.getInstance().getConnection().getNetworkManager(); CHANNEL.sendTo(msg, manager, NetworkDirection.PLAY_TO_CLIENT);
  6. Sorry, I've used the wrong placement. With Placement.COUNT_RANGE it will work correctly.
  7. Hello together On testing my own World Ore Gen Geatures i've fond an Error and i don't understand how this Error can Happens. When World is be createted the function place in Any Feature will bee called. When i Configured my Feature with a placement with bottom-offset top-offset an maxHeigt. Wenn Place is called it is possible to get an y-value with is lower then bottomOffset. On serching i've fond the Class placement witch is called befor Feture starts. package net.minecraft.world.gen.placement; import com.mojang.datafixers.Dynamic; import java.util.Random; import java.util.function.Function; import java.util.stream.IntStream; import java.util.stream.Stream; import net.minecraft.util.math.BlockPos; public class HeightBiasedRange extends SimplePlacement<CountRangeConfig> { public HeightBiasedRange(Function<Dynamic<?>, ? extends CountRangeConfig> p_i51388_1_) { super(p_i51388_1_); } public Stream<BlockPos> getPositions(Random random, CountRangeConfig p_212852_2_, BlockPos pos) { return IntStream.range(0, p_212852_2_.count).mapToObj((p_227436_3_) -> { int i = random.nextInt(16) + pos.getX(); int j = random.nextInt(16) + pos.getZ(); int k = random.nextInt(random.nextInt(p_212852_2_.maximum - p_212852_2_.topOffset) + p_212852_2_.bottomOffset); return new BlockPos(i, k, j); }); } } in Line int k = random.. there are two errors: a) when calling the inner random.nextInt(..) with Value ..Maximum = 64 and bottomOffset = 30) the parameter in nextInt will not be 34. In some test i fond ther will be allways an value of 31 by differnet values of Maximum and topOffset it might be the Differenz in Adress range not in Value) b) when k is the y value for placement. I think there is an random.nextInt(...) to much. the correct line must be: int k = random.nextInt(p_212852_2_.maximum - p_212852_2_.topOffset) + p_212852_2_.bottomOffset; How To test it: only set an Breakpoint on line 19 (int k = ...) in net.minecraft.world.gen.placement.HeightBiasedRange and look wat will be happend. For Info: I Worrk with Eclipse, Version 2019-19
  8. Hello Together, in my food work i_m a Software Engenner in Databases and create Programms in ABAP and in Progess. When i have a little bit Time i create special Mods for Minecraft. In this time I'm working on my Old Mod ( with have been cteatet in Version 7 and transfered up to V10. I've have 8 features with need to manipulate original Minecraft code. Therfore i've had a core Mod to insert 6 UserExits like: if(myMod.MyStaticFunction(some values)) return(value);; In my old version i've had my own Function to show Java Pre code like an Assemblerfile. I've testes my code in 15.2 and i think i dont need 1 of my userexits anylonger. But for the rest i need my User Exits or a Core Mod tu insert them by my self. Statements: * The Core Mod like in V8 dont work anylonger. * The Main Mod file will be started After minecraft and forge is loaded completely, so i Cant create my own File replacer * I know Core mods are not wanted, but i need them or an other way to create my user Exits. * Please dont tell me something of dont need core mods.. I've worked about 4 Days on a workaround for one of my problems, but it is impossible to find one. I know Core mods can make that other mods dont work anylonger, But this dont wil be happened when only good designed userexits will be used. Do somebody cann tell me how create a Core Mod in Version 15.2. My ideas without a classic core mod with replaces code on loading: 1.) create a Function to modify the File AppData\Roaming\.minecraft\versions\1.15.2\1.15.2.jar if it dont contain my version marker and restart minecraft. this is not good, because the modification is permanent and not only exists when my Mod is loaded 2.) Create my own Minecraft-Mod-Version.start file. ( I Think this is a liittle to big, For only 5 ore 6 Userexits) 3.) Replace completele loades classes with my owns I dont know if this is possible in Java.If it is possible can somebody tell me how to do it. Please help me dont discusse about need a core mod ore not.
  9. I Think i need a Coremod, because Fire Block in Forge has an Error and my Block will be replaced with the fire Block instead of catching Fire. I Found a Possibility to do this: I Use original Class bow ( = FireBlock) and manipulate this class without obofuscuate the block. This is a little bit tricky.After manipulating the class i can replace te bow.class by programm in .Minecraft... Is there an other way? Do somebody now an program to reobofuscuate the Class instead of programming obofuscuated code in 1.14.4. Thanks for your help.
  10. In this time i need to change the Fire Blocks. when burning on my oil block. Oil is a Block with different Hight between 2 Pixel and 16 Pixel for a full block. When Oil is Burning on each Burn Step block will be reduced by 2 Pixles in High. I want that the fire Block begins just on top of the Oi and slide down when oil Leve is reduced. The second problem is, that oil is not a full Block. The standard mechanismen at Chatch Fire only works, when Block is Solid at Upside. Ive tested with replacing fireBlock at BlockTick, but there is an small error in Fire Block. It might be possible that my Oil Block is replaced with Fire instead of starting Burn on Block above of my Block. Do you have souch a Java Script for me, so i can test with replacing the Fire Block in my Mod.
  11. I need to modify two original Minecraft-Classes for inserting special functionality. In Version 1.12 i've had a possibility to change original Minecraft classes by Classtransformer. Therfor i've had 2 CLasses: * public class CBClassTransformer implements IClassTransformer * public class CBFMLLoadingPlugin implements IFMLLoadingPlugin Is there any Possibility to do the same in 1.14.4. Can somebody help me.
  12. The FireBlock in Forge ist different in function to the Fire Block in Vanilla. Details: In Vanilla wenn a Block Catch Fire the Fire will replaced only an Air Blocks on Top of burning Material. In forge (forge-1.14.4-28.0.100) the Fire will replace the burning Material. In this Case Catching fire will not work correctly for Burning Blocks ( In my Case on Oil). Some Program Details: In Function: public void tick ... TryCatchFire will be called: this.tryCatchFire(worldIn, pos.east(), 300 + k, random, i, Direction.WEST); this.tryCatchFire(worldIn, pos.west(), 300 + k, random, i, Direction.EAST); this.tryCatchFire(worldIn, pos.down(), 250 + k, random, i, Direction.UP); this.tryCatchFire(worldIn, pos.up(), 250 + k, random, i, Direction.DOWN); this.tryCatchFire(worldIn, pos.north(), 300 + k, random, i, Direction.SOUTH); this.tryCatchFire(worldIn, pos.south(), 300 + k, random, i, Direction.NORTH); In TryCatchFire Fire the Int i will be Filled with Flamability of this Block and then te block will replaced with the fire Block; private void tryCatchFire(World worldIn, BlockPos pos, int chance, Random random, int age, Direction face) { int i = worldIn.getBlockState(pos).getFlammability(worldIn, pos, face); if (random.nextInt(chance) < i) { BlockState blockstate = worldIn.getBlockState(pos); if (random.nextInt(age + 10) < 5 && !worldIn.isRainingAt(pos)) { int j = Math.min(age + random.nextInt(5) / 4, 15); worldIn.setBlockState(pos, this.getStateForPlacement(worldIn, pos).with(AGE, Integer.valueOf(j)), 3); } else { worldIn.removeBlock(pos, false); } In get Flamability, the Direction is ignored: See IForgeBlockStatre default int getFlammability(IBlockReader world, BlockPos pos, Direction face) { return getBlockState().getBlock().getFlammability(getBlockState(), world, pos, face); } And IForgeBlock default int getFlammability(BlockState state, IBlockReader world, BlockPos pos, Direction face) { return ((FireBlock)Blocks.FIRE).func_220274_q(state); } To Correct Problem it rmay be nessesary to insert 2 Changes: in In TryCatchFire it might be helpfully to Check the Block for Place a Fire must be an Air Block: private void tryCatchFire(World worldIn, BlockPos pos, int chance, Random random, int age, Direction face) { if (! worldIn.getBlockState(pos).isAir() return; int i = worldIn.getBlockState(pos).getFlammability(worldIn, pos, face); in IForgeBlock Direction may be used: I Downt know if this function will be called elsewhere. So it might be nessesary to allow use direction null default int getFlammability(BlockState state, IBlockReader world, BlockPos pos, Direction face) { if (face == null) return ((FireBlock)Blocks.FIRE).func_220274_q(state); Blockstate,blockstate = world.getBlockState(pos.offset(face)); return ((FireBlock)Blocks.FIRE).func_220274_q(blockstate); }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.