Code Monkey home page Code Monkey logo

butchercraft's Introduction

Source installation information for modders
-------------------------------------------
This code follows the Minecraft Forge installation methodology. It will apply
some small patches to the vanilla MCP source code, giving you and it access 
to some of the data and functions you need to build a successful mod.

Note also that the patches are built against "un-renamed" MCP source code (aka
SRG Names) - this means that you will not be able to read them directly against
normal code.

Setup Process:
==============================

Step 1: Open your command-line and browse to the folder where you extracted the zip file.

Step 2: You're left with a choice.
If you prefer to use Eclipse:
1. Run the following command: `gradlew genEclipseRuns` (`./gradlew genEclipseRuns` if you are on Mac/Linux)
2. Open Eclipse, Import > Existing Gradle Project > Select Folder 
   or run `gradlew eclipse` to generate the project.

If you prefer to use IntelliJ:
1. Open IDEA, and import project.
2. Select your build.gradle file and have it import.
3. Run the following command: `gradlew genIntellijRuns` (`./gradlew genIntellijRuns` if you are on Mac/Linux)
4. Refresh the Gradle Project in IDEA if required.

If at any point you are missing libraries in your IDE, or you've run into problems you can 
run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything 
{this does not affect your code} and then start the process again.

Mapping Names:
=============================
By default, the MDK is configured to use the official mapping names from Mojang for methods and fields 
in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this
license, if you do not agree with it you can change your mapping names to other crowdsourced names in your 
build.gradle. For the latest license text, refer to the mapping file itself, or the reference copy here:
https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md

Additional Resources: 
=========================
Community Documentation: http://mcforge.readthedocs.io/en/latest/gettingstarted/  
LexManos' Install Video: https://www.youtube.com/watch?v=8VEdtQLuLO0  
Forge Forum: https://forums.minecraftforge.net/  
Forge Discord: https://discord.gg/UvedJ9m  

butchercraft's People

Contributors

lance5057 avatar unilock avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

butchercraft's Issues

Create Compat

Here's an idea: the ability to fully automate butchery via Create. Right now, you can use arms and deployers to automate it, but special machines could be very neat I think! Instead of a simple "have a mechanical hand use the knife", now we have to "use a mechanical device that spins on top"! I think that would make the mod more intricate and neat-looking!

Thanks!

Cannot remove things from meat grinder

Basically the same as #9 but with the meat grinder. This one is particularly problematic because when you are rotating the thing, if it gives it to you and you aren't expecting it, you might place the result back into the grinder.

Duplicate items with extraDelights

Having both this and extraDelights installed gives identical looking items/blocks that are not compatible with each other.
e.g. the butchercraft drying rack lacks jei integration

Kubejs Error

// priority: 0

// Visit the wiki for more info - https://kubejs.com/

console.info('Hello, World! (Loaded server scripts)')

ServerEvents.recipes(e => {
    // Change recipes here
    e.remove({ output: 'minecraft:oak_planks' })
})

When I use this code( e.remove({ output: xxx }) ), Kubejs throws an error after reloading it.

My mods list:
image

Here are the details of the reported error:

[18:09:39] [INIT] KubeJS 1902.6.1-build.362; MC 1902 forge
[18:09:39] [INIT] Loaded plugins:
[18:09:39] [INIT] - dev.latvian.mods.kubejs.forge.BuiltinKubeJSForgePlugin
[18:09:39] [INFO] server_scripts:example.js:5: Hello, World! (Loaded server scripts)
[18:09:39] [INFO] Loaded script server_scripts:example.js in 0.015 s
[18:09:39] [INFO] Loaded 1/1 KubeJS server scripts in 0.024 s
[18:09:39] [INFO] Scripts loaded
[18:09:39] [INFO] Initializing recipe event...
[18:09:39] [INFO] Processing recipes...
[18:09:39] [INFO] Found 1558 recipes in 81.88 ms
[18:09:39] [ERROR] ! Error occurred while handling event 'ServerEvents.recipes': java.lang.NullPointerException
[18:09:39] [ERROR] ! java.lang.NullPointerException
[18:09:39] [ERROR] ! at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[18:09:39] [ERROR] ! at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
[18:09:39] [ERROR] ! at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[18:09:39] [ERROR] ! at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
[18:09:39] [ERROR] ! at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:564)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:591)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.joinForPoolInvoke(ForkJoinTask.java:1042)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2639)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS.runInParallel(RecipesEventJS.java:638)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS.forEachRecipeAsync(RecipesEventJS.java:489)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS.remove(RecipesEventJS.java:516)
[18:09:39] [ERROR] ! at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[18:09:39] [ERROR] ! at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[18:09:39] [ERROR] ! at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[18:09:39] [ERROR] ! at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.MemberBox.invoke(MemberBox.java:160)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.NativeJavaMethod.call(NativeJavaMethod.java:463)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.Interpreter.interpretLoop(Interpreter.java:1086)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.Interpreter.interpret(Interpreter.java:423)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.InterpretedFunction.call(InterpretedFunction.java:72)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.Context.doTopCall(Context.java:1197)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.ScriptRuntime.doTopCall(ScriptRuntime.java:2619)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.InterpretedFunction.call(InterpretedFunction.java:70)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.ArrowFunction.call(ArrowFunction.java:42)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.InterfaceAdapter.invokeImpl(InterfaceAdapter.java:129)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.InterfaceAdapter.invoke(InterfaceAdapter.java:88)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.rhino.VMBridge.lambda$newInterfaceProxy$0(VMBridge.java:70)
[18:09:39] [ERROR] ! at TRANSFORMER/jdk.proxy4/jdk.proxy4.$Proxy97.onEvent(Unknown Source)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.event.EventHandlerContainer.handle(EventHandlerContainer.java:39)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.event.EventHandler.postToHandlers(EventHandler.java:302)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.event.EventHandler.post(EventHandler.java:272)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.event.EventHandler.post(EventHandler.java:226)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.event.EventHandler.post(EventHandler.java:189)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS.post(RecipesEventJS.java:291)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.world.item.crafting.RecipeManager.handler$zzn000$customRecipesHead(RecipeManager.java:1531)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.world.item.crafting.RecipeManager.m_5787_(RecipeManager.java)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.world.item.crafting.RecipeManager.m_5787_(RecipeManager.java:34)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.packs.resources.SimplePreparableReloadListener.m_10789_(SimplePreparableReloadListener.java:13)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.packs.resources.SimpleReloadInstance.m_143940_(SimpleReloadInstance.java:69)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.TickTask.run(TickTask.java:18)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:763)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:157)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:746)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:740)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_129861_(MinecraftServer.java:1312)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.commands.ReloadCommand.m_138235_(ReloadCommand.java:22)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.commands.ReloadCommand.m_138228_(ReloadCommand.java:53)
[18:09:39] [ERROR] ! at MC-BOOTSTRAP/[email protected]/com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:263)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.commands.Commands.m_242674_(Commands.java:240)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.network.ServerGamePacketListenerImpl.m_242600_(ServerGamePacketListenerImpl.java:1239)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$12(ServerGamePacketListenerImpl.java:1217)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_18693_(BlockableEventLoop.java:68)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.TickTask.run(TickTask.java:18)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:763)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:157)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:746)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:740)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:726)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:658)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:244)
[18:09:39] [ERROR] ! at java.base/java.lang.Thread.run(Thread.java:833)
[18:09:39] [ERROR] ! Caused by: java.lang.NullPointerException: ItemStack should never be null, but recipe butchercraft:sheeptest[butchercraft:meat_hook] returned null as the output!
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.JsonRecipeJS.hasOutput(JsonRecipeJS.java:40)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.filter.OutputFilter.test(OutputFilter.java:15)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS$RecipeStreamFilter.test(RecipesEventJS.java:438)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS$RecipeStreamFilter.test(RecipesEventJS.java:435)
[18:09:39] [ERROR] ! at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
[18:09:39] [ERROR] ! at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779)
[18:09:39] [ERROR] ! at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
[18:09:39] [ERROR] ! at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.helpComplete(ForkJoinPool.java:1223)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinPool.helpComplete(ForkJoinPool.java:1915)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.awaitDone(ForkJoinTask.java:433)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:687)
[18:09:39] [ERROR] ! at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159)
[18:09:39] [ERROR] ! at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173)
[18:09:39] [ERROR] ! at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
[18:09:39] [ERROR] ! at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
[18:09:39] [ERROR] ! at TRANSFORMER/[email protected]/dev.latvian.mods.kubejs.recipe.RecipesEventJS.lambda$forEachRecipeAsync$10(RecipesEventJS.java:489)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1375)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
[18:09:39] [ERROR] ! at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
[18:09:39] [INFO] Posted recipe events in 241.6 ms
[18:09:40] [INFO] Added 0 recipes, removed 3 recipes, modified 0 recipes, with 0 failed recipes in 23.73 ms

Add villager to the cut!

Yes, it sounds crazy, but at the same time incredibly cool, creepy and cool. Damn, this is the perfect addon for a vampirized

The attack speed of the butcher knife is too fast

The original Iron Sword attack speed is only 1.6, and the mod tool reaches a terrifying 4.0. Hopefully modifications can be made to reduce attack speed or damage reduction. Or make butcher knives into items, not as weapons. (I use translation software to communicate)

[Incompatibility] Waystones

No clue why, but Butchercraft seems to dislike Waystones of all mods. The pack crashes on start up with those two in the same pack. If it isn't a butchercraft issue then I'll take it up with the Waystones team

Minor visual bugs and can't craft items

The butcher block has no object textures. Untitled block of cheese and butter (link to object) butchercraft-2.2.1 - for 1.19.2
and Also, I can't craft items in my build with this mod.

1.19.2 failure

Hello!
Right now my game crashes if I either look up my inventory or else, I'm breeding animals with the mod installed, and then this appears on my screen:

Error code -1
The game crashed whilst ticking entity
Error: java.lang.NullPointerException: Cannot read field "f_19853_" because the return value of "net.minecraftforge.event.entity.living.BabyEntitySpawnEvent.getCausedByPlayer()" is null

I made a full check and the only mod provoking this issue is this one, can you help me out please?

Mod textures do NOT load

For the 1.12.2 version of ButcherCraft, it seems that the textures for all the items don't load. This results in the default pink checkered square instead of any actual textures. This is a huge issue you need to fix

Duplication glitch / Not moving meat hook [1.19.2]

I found a way to duplicate the meat hook in my modpack.
So the meat hook can not be pushed by a piston but i really wanted to create someting like a factory.

I quickly installed the Create mod because it works well with Farmer's Delight, but when i forced the meat hook to be moved by all of the Create stuff, a copy of the meat hook is placed at the starting position after the moving process is done.
So the meat hook is duplicated.

I'd love to see a movable meat hook so Butchercraft can be used in more modpacks.

Suggestion: A Carcass API

Right now, you hard code the carcass processing code/drops directly into the Meat Hook TE. I would propose adding an interface, Carcass (or ICarcass if you like that style MC uses), which adds the methods returning lists of ItemStacks (referred to in the code base as returns) for each progression stage (skinning, organs, sawing, and finally butchering). Then, of course, you would remove all of those hard coded lists with calls to the interface.

Compat with Animania

Hi, I'm an Animania dev, our users are begging for compatibility with Butchercraft. However, to do that, I think quite a lot of work would be needed.

All our animals have EntityAnimaniaCow, EntityAnimaniaPig, EntityAnimaniaSheep or a similar variation as a base class. Some (cows for example) also extend EntityCow, but pigs do not extend EntityPig. Additionally, our animals have genders and different models based on genders. I looked at your source code, and since you're using a hardcoded model for the hooked animals, you would also need a model for every variation of animania animals (16 models only for cows, 24 if you include baby cows). Another approach could be to make the hook model dynamic, but you'd have to figure out how to rotate their arms and legs.

What I'm saying is, is that it's difficult but doable. If you think you want to do it, I'd gladly support you if you have any questions about our code.

Missing recipes

None of these are accessible in survival:

  • Meat Hook
  • Meat Grinder
  • Grill
  • Butcher Knife
  • Skinning Knife
  • Bone Saw
  • Spatula
  • Extruder Plate
  • Sausage Extruder

Raw meats not considered raw

These meats do not give you hunger. I suspect this is not intentional:

  • Stew Meat
  • Sausage
  • Roast
  • Ribs
  • Cubed Meat
  • Ground Meat
  • Scrap Meat

What's up with the textures for the 1.12.2 version?

I've been a fan of this mod for a while, but when I was making a new modpack when I went to test it all of the textures show as the default pink and black except for the butchers knife which has the cow carcass texture and the meat grinder which has the right model only when placed, as an item it has the pink and black texture, I've seen threads online about how you were working on it but it's been nearly 3-4 years since those, so wtf, I don't mean any hate or anything but this is a pretty large issue, every other version seems to work fine with the textures except 1.12.2, I even made a instance where it was just Butchercraft and it still had the texture issue, please please please fix this, this is one of my favorite mods but it doesn't work on the most popular Minecraft versions to mod.

butcher block and kubejs

when i have the mod installed kubejs doesn't work and in the logs it looks like its the butcher block

Doesn't register Genetic Animals

Was looking forward to butchering the animals but Butchercraft sadly doesn't recognize the genetic animals as their vanilla counterparts. It'd be cool if we had a config to add mobs to be butchered to even if the models on the hook stay the same

Meat duplication recipe cycle

image
(Recipe tree made with EMI)

There is a duplication recipe cycle where you can quadruple your meat scraps by cutting them into ground meat, turning them into meat block, then disassembling the meat block into scraps.

Regarding broken textures

When looking at the log, it seems like the items are not registered yet when their textures are registered:

[10:47:56] [main/ERROR] [FML]: Exception loading model for variant minecraft:air#inventory for item "minecraft:air", normal location exception: 
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model minecraft:item/air with loader VanillaLoader.INSTANCE, skipping
	at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:161) ~[ModelLoaderRegistry.class:?]
	at net.minecraftforge.client.model.ModelLoader.loadItemModels(ModelLoader.java:302) ~[ModelLoader.class:?]
	at net.minecraft.client.renderer.block.model.ModelBakery.loadVariantItemModels(ModelBakery.java:175) ~[ModelBakery.class:?]
	at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:151) ~[ModelLoader.class:?]
	at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
	at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121) [SimpleReloadableResourceManager.class:?]
	at net.minecraft.client.Minecraft.init(Minecraft.java:559) [Minecraft.class:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:421) [Minecraft.class:?]
	at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_121]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_121]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_121]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_121]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_121]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_121]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_121]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_121]
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
	at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.io.FileNotFoundException: minecraft:models/item/air.json
	at net.minecraft.client.resources.FallbackResourceManager.getResource(FallbackResourceManager.java:69) ~[FallbackResourceManager.class:?]
	at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:65) ~[SimpleReloadableResourceManager.class:?]
	at net.minecraft.client.renderer.block.model.ModelBakery.loadModel(ModelBakery.java:334) ~[ModelBakery.class:?]
	at net.minecraftforge.client.model.ModelLoader.access$1400(ModelLoader.java:115) ~[ModelLoader.class:?]
	at net.minecraftforge.client.model.ModelLoader$VanillaLoader.loadModel(ModelLoader.java:861) ~[ModelLoader$VanillaLoader.class:?]
	at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:157) ~[ModelLoaderRegistry.class:?]
	... 20 more

For that reason, it is trying to register a model for Air. I personally haven't been experiencing this kind of issue, but maybe that's because I register my items differently. I would try registering the resources during ModelRegistryEvent and see if that fixes the issues.

To resolve the block breaking particle issue and the missing blockstate exception, you need to add a blockstate and a corresponding model, which contains the break particle texture.

Invisible

When I put an animal on the meat hook it’s invisible I can still interact with it though

1.20.1+

Either you release version 1.20.1 or I dump 200,000 tons of dynamite on 2000 pigs!

`HookRecipe` returns a `null` item stack instead of `ItemStack.EMPTY`

Here:

@Override
public ItemStack getResultItem() {
return null;
}

The method being overridden is not annotated @Nullable, it is by-default annotated not-null by mojang's convention and being an ItemStack, it is strongly preferred that you don't return null, rather instead use ItemStack.EMPTY here.

Reason being, some mods (hello!) like to iterate over all recipes, and call .getResultItem(), and expect, given it's an ItemStack returned from a non-null method, to in fact be non-null.

Thanks!

[1.18.2] Crash on loading after adding Butchercraft to pack

https://pastebin.com/ujQfv1Sw

-- Head --
Thread: Render thread
Stacktrace:
	at java.util.Objects.requireNonNull(Objects.java:334) ~[?:?] {re:mixin}
-- MOD butchercraft --
Details:
	Mod File: /C:/Users/drakr/AppData/Roaming/.minecraft/1182.1/mods/butchercraft-2.1.1.jar
	Failure message: Butchercraft (butchercraft) encountered an error during the common_setup event phase
		java.lang.NullPointerException: Registry Object not present: farmersdelight:cooked_rice
	Mod Version: 2.1.1
	Mod Issue URL: https://github.com/Lance5057/Butchercraft/issues
	Exception message: java.lang.NullPointerException: Registry Object not present: farmersdelight:cooked_rice
Stacktrace:
	at java.util.Objects.requireNonNull(Objects.java:334) ~[?:?] {re:mixin}

Modlist in the crash

REQUEST actually

Could you perhaps make it work with Cooking for Blockheads and not require Farmer's Delight? Not sure why this required Farmers Delight specifically but I prefer CFB and they both sorta do similar things. Because this mod rocks. I've always hated killing a cow for a couple steaks. Just don't want redundant mods in my pack. Thanks for such a cool mod and I like how you implemented the butchering process. Hopefully later there can be a way to add other animals. Like from Alex's mobs etc. Maybe by using datapacks.
Thanks and Happy New Year!

Just some questions for the creator <3

Hellooooo!!!!
I just downloaded ur mod from https://www.minecrafteo.com/butchercraft-mod/ for the 1.12.2 version, and i see that Farmer's delight is needed for the mod to work because of the textures, the problem is that Farmer's delight doesn't exist for the 1.12.2 version (at least i didn't find it anywhere) :(

My question is: ¿is there another way to make your mod work without Farmer's delight?

Thank you in advance, and keep doing this original mods, they are great!!!!!

Butcher tools cannot take damage

Looking at the slaughtering code, at least, it appears the intent is for the Butcher Knife to be damaged when you kill something. It doesn't have metadata/damage values, so it does not take any damage.

Raw Beef is the only non-Butchercraft meat that can be ground

I'm not sure if this is intentional, but you cannot grind any of the other vanilla meats, and I'm guessing no mod added ones either. The way I would do it is to check the following in the order listed:

  1. Check if instanceof ItemFood
  2. Check if isWolfsFavouriteTreat (or whatever it's called, usually this is used as a "is meat" field)
  3. Check if it has a smelting recipe

If it becomes a problem for a few meats you could add a configurable grinder blacklist.

Order of phases?

For the cow and sheep, the order is skinning, deboning, gutting, butchering. But for the pig, it's skinning, gutting, deboning, butchering.

Some recipes are wrong/missing

I can turn Ground Pork into Minced Beef, and a lot of the cooked meat items have no recipe - there is only the beef recipe.

Cannot take things off/out of Grill

You should be able to sneak-right-click to take things off or out of the grill. It should try to take everything off of the top first, and then move onto the charcoal.

Error and server/client desynchronization

This error occurs on the server, plus the players often have a mismatch between the items they need to freshen up, and which are displayed to them

[13:59:22] [Server thread/ERROR] [minecraft/PacketUtils]: Failed to handle packet net.minecraft.network.protocol.game.ServerboundUseItemOnPacket@67f835f3, suppressing error
java.lang.NullPointerException: Cannot invoke "java.util.function.Consumer.accept(Object)" because "p_41625_" is null
        at net.minecraft.world.item.ItemStack.m_41622_(ItemStack.java:539) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:forge:itemstack,re:classloading,pl:accesstransformer:B,xf:fml:forge:itemstack,pl:mixin:APP:bettercombat.mixins.json:ItemStackMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B,xf:fml:forge:itemstack,re:mixin,pl:accesstransformer:B,xf:fml:forge:itemstack}
        at com.lance5057.butchercraft.workstations.blockentities.MeatHookBlockEntity.butcher(MeatHookBlockEntity.java:234) ~[butchercraft-2.1.3.jar%2360!/:2.1.3] {re:classloading}
        at com.lance5057.butchercraft.workstations.blocks.MeatHookBlock.m_6227_(MeatHookBlock.java:93) ~[butchercraft-2.1.3.jar%2360!/:2.1.3] {re:classloading}
        at net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.m_60664_(BlockBehaviour.java:705) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,re:classloading,pl:mixin:APP:tinkersurvival.mixins.json:AbstractBlockStateAccessor,pl:mixin:A}
        at net.minecraft.server.level.ServerPlayerGameMode.m_7179_(ServerPlayerGameMode.java:543) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.network.ServerGamePacketListenerImpl.m_6371_(ServerGamePacketListenerImpl.java:1336) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,re:classloading,pl:mixin:A,re:mixin}
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.m_5797_(ServerboundUseItemOnPacket.java:30) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.m_5797_(ServerboundUseItemOnPacket.java:8) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.network.protocol.PacketUtils.m_131356_(PacketUtils.java:26) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.server.TickTask.run(TickTask.java:18) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,re:computing_frames,re:classloading}
        at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:1096) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:135) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:1079) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:1073) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:1059) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:945) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:259) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at java.lang.Thread.run(Thread.java:833) [?:?] {re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin}
[13:59:22] [Server thread/ERROR] [minecraft/PacketUtils]: Failed to handle packet net.minecraft.network.protocol.game.ServerboundUseItemOnPacket@580f8fc, suppressing error
java.lang.NullPointerException: Cannot invoke "java.util.function.Consumer.accept(Object)" because "p_41625_" is null
        at net.minecraft.world.item.ItemStack.m_41622_(ItemStack.java:539) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:forge:itemstack,re:classloading,pl:accesstransformer:B,xf:fml:forge:itemstack,pl:mixin:APP:bettercombat.mixins.json:ItemStackMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B,xf:fml:forge:itemstack,re:mixin,pl:accesstransformer:B,xf:fml:forge:itemstack}
        at com.lance5057.butchercraft.workstations.blockentities.MeatHookBlockEntity.butcher(MeatHookBlockEntity.java:234) ~[butchercraft-2.1.3.jar%2360!/:2.1.3] {re:classloading}
        at com.lance5057.butchercraft.workstations.blocks.MeatHookBlock.m_6227_(MeatHookBlock.java:93) ~[butchercraft-2.1.3.jar%2360!/:2.1.3] {re:classloading}
        at net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.m_60664_(BlockBehaviour.java:705) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,re:classloading,pl:mixin:APP:tinkersurvival.mixins.json:AbstractBlockStateAccessor,pl:mixin:A}
        at net.minecraft.server.level.ServerPlayerGameMode.m_7179_(ServerPlayerGameMode.java:543) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.network.ServerGamePacketListenerImpl.m_6371_(ServerGamePacketListenerImpl.java:1336) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,re:classloading,pl:mixin:A,re:mixin}
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.m_5797_(ServerboundUseItemOnPacket.java:30) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.m_5797_(ServerboundUseItemOnPacket.java:8) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.network.protocol.PacketUtils.m_131356_(PacketUtils.java:26) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.server.TickTask.run(TickTask.java:18) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:classloading}
        at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,re:computing_frames,re:classloading}
        at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:1096) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:135) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:1079) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:1073) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:1059) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:945) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:259) ~[server-1.18.2-20220404.173914-srg.jar%2379!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A,re:mixin,pl:accesstransformer:B}
        at java.lang.Thread.run(Thread.java:833) [?:?] {re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin,re:mixin}

Strange break particle textures

The break particle textures for the Meat Hook, Meat Grinder, and Grill are a bit weird. I'm not sure what they are, but they don't look right.

[1.19.2] - Duplication bug with butchercraft tools

Hello,
I recently tried out this mod with friends on a server and discovered a bug that allows infinite tools.

To reproduce the bug:

  1. Make any of the tools.
  2. Wear them down a little to half durability.
  3. Craft them together with another set of unbroken tools.

The result is a duplicate of any tool. (Tested with gut knife, butcher's knife, bone saw, and skinning knife.)

Please fix this for future updates, I really like the integration of it with other mods!

Feature Request: Option for friendlier models/textures.

Can we get an option to replace the textures/models with something a bit more kid friendly? Something like a generic meat haunch/etc? For younger kids, I think it's great to teach them where their food comes from/etc, but I'd love an option to kind of ease them into the concept.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.